Supposons que j'ai un tableau avec 2 éléments dont le type est string/float . Comment les imprimer ensemble sans notation scientifique pour l'élément float.
Par exemple:
package main
import (
"fmt"
)
func main() {
values := []interface{}{"mydata", 1234567890.123}
for _, v := range values{
fmt.Printf("%v\n", v)
}
}
La sortie sera
mes données
1.234567890123e + 09
Ce que je veux c'est
mes données
1234567890.123
Le paquet de documentation de fmt
l'explique: Le verbe %v
est le format par défaut, ce qui pour des nombres flottants signifie/revient à %g
qui est
% e pour les grands exposants,% f sinon. La précision est discutée ci-dessous.
Si vous voulez toujours "point décimal mais pas d’exposant, par exemple 123,456", utilisez %f
explicitement.
Mais vous ne pouvez l'utiliser que pour des nombres flottants, vous devez donc vérifier le type de la valeur que vous imprimez. Pour cela, vous pouvez utiliser une assertion de type type ou une assertion de type .
Exemple:
switch v.(type) {
case float64, float32:
fmt.Printf("%f\n", v)
default:
fmt.Printf("%v\n", v)
}
Sortie (essayez-le sur le Go Playground ):
mydata
1234567890.123000
Vous pouvez utiliser %f
pour imprimer un float . Étant donné votre tranche d'interface, vous devez d'abord vérifier le type de l'élément. Vous pouvez le faire comme suit:
package main
import (
"fmt"
)
func main() {
values := []interface{}{"mydata", 1234567890.123}
for _, v := range values {
// Check if the type conversion to float64 succeeds.
if f, ok := v.(float64); ok {
fmt.Printf("%f\n", f)
} else {
fmt.Println(v)
}
}
}
Les sorties:
mydata
1234567890.123000
La liste complète des drapeaux pour les flotteurs de fmt est:
%b decimalless scientific notation with exponent a power of two,
in the manner of strconv.FormatFloat with the 'b' format,
e.g. -123456p-78
%e scientific notation, e.g. -1.234456e+78
%E scientific notation, e.g. -1.234456E+78
%f decimal point but no exponent, e.g. 123.456
%F synonym for %f
%g %e for large exponents, %f otherwise. Precision is discussed below.
%G %E for large exponents, %F otherwise