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"
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 :
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) }
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
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!