Lors de la présentation de nombres à virgule flottante dans des tableaux à largeur fixe, des problèmes surviennent concernant la préservation des chiffres significatifs. La fonction standard fmt.Printf offre un contrôle limité sur cet aspect.
Pour résoudre ce problème, nous pouvons implémenter une fonction de formatage personnalisé qui détermine le nombre optimal de chiffres significatifs à s'adapter à une largeur spécifiée. Il s'agit d'analyser le nombre en question et de choisir entre la notation scientifique et la forme régulière en fonction de sa grandeur.
Mise en œuvre :
// format12 formats x to be 12 chars long. func format12(x float64) string { if x >= 1e12 { // For scientific notation, determine the width of the exponent. s := fmt.Sprintf("%.g", x) format := fmt.Sprintf("%%12.%dg", 12-len(s)) return fmt.Sprintf(format, x) } // For regular form, determine the width of the fraction. s := fmt.Sprintf("%.0f", x) if len(s) == 12 { return s } format := fmt.Sprintf("%%%d.%df", len(s), 12-len(s)-1) return fmt.Sprintf(format, x) }
Tests :
fs := []float64{0, 1234.567890123, 0.1234567890123, 123456789012.0, 1234567890123.0, 9.405090880450127e+9, 9.405090880450127e+19, 9.405090880450127e+119} for _, f := range fs { fmt.Println(format12(f)) }
Sortie :
0.0000000000 0.1234567890 1234.5678901 123456789012 1.234568e+12 9405090880.5 9.405091e+19 9.40509e+119
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!