Maison > développement back-end > Golang > Comment imprimer des nombres Float64 en Go avec une largeur fixe et des chiffres significatifs maximum ?

Comment imprimer des nombres Float64 en Go avec une largeur fixe et des chiffres significatifs maximum ?

Barbara Streisand
Libérer: 2024-12-04 01:47:10
original
663 Les gens l'ont consulté

How to Print Float64 Numbers in Go with Fixed Width and Maximum Significant Digits?

Impression de nombres Float64 avec une largeur fixe et des chiffres significatifs

Imaginez que vous deviez imprimer des nombres float64 dans un tableau avec une largeur fixe de 12 caractères et le nombre maximum possible de chiffres significatifs. Considérez les exemples suivants :

fmt.Printf("%12.6g\n", 9.405090880450127e+119) //"9.40509e+119"
fmt.Printf("%12.6g\n", 0.1234567890123)        //"    0.123457"
fmt.Printf("%12.6g\n", 123456789012.0)         //" 1.23457e+11"
Copier après la connexion

Comme vous pouvez le constater, la fonction fmt.Printf par défaut avec le spécificateur de format .6g peut soit tronquer les chiffres significatifs, soit utiliser la notation scientifique, ce qui entraîne une perte de précision. Existe-t-il un moyen d'obtenir le formatage souhaité à l'aide des fonctions de bibliothèque standard ?

Formatage personnalisé à la rescousse

Il n'existe pas de fonction de bibliothèque standard simple qui réponde exactement à nos exigences. Cependant, nous pouvons développer une fonction de formatage personnalisée qui prend en compte la largeur souhaitée et les chiffres significatifs maximum. Voici comment nous abordons cela :

  1. Vérifiez si le nombre est supérieur ou égal à 1e12 puisque c'est le tournant entre la forme régulière et la notation scientifique.
  2. Pour la forme régulière, déterminer le nombre de chiffres de fraction qui correspondent à la largeur souhaitée. Construisez la chaîne de format en conséquence à l'aide de Sprintf pour spécifier à la fois la largeur et la précision.
  3. Pour la notation scientifique, vérifiez la largeur de l'exposant (par exemple, e 1, e 10, e 100) et calculez la précision maximale possible pour la fraction. partie dans la largeur restante.

Voici un exemple d'implémentation dans Go :

import (
    "fmt"
)

func format12(x float64) string {
    if x >= 1e12 {
        exp := fmt.Sprintf("%.g", x)
        return fmt.Sprintf("%%12.%dg", 12-len(exp))
    }
    s := fmt.Sprintf("%.0f", x)
    if len(s) == 12 {
        return s
    }
    return fmt.Sprintf("%%%d.%df", len(s), 12-len(s)-1)
}
Copier après la connexion

Le test de cette fonction avec différentes valeurs float64 donne le résultat suivant :

0.0000000000
0.1234567890
1234.5678901
123456789012
1.234568e+12
9405090880.5
9.405091e+19
9.40509e+119
Copier après la connexion

Cela montre comment imprimer des nombres float64 dans une largeur fixe avec le nombre maximum possible de nombres significatifs chiffres utilisant un formatage personnalisé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal