La conversion de nombres à virgule flottante (float64) en entiers (int) dans Go peut entraîner résultats inattendus en raison des limites de la représentation à virgule flottante.
Les nombres décimaux comme 100,55 ne peuvent pas être représentés avec précision en utilisant un nombre fini de bits en binaire, la représentation interne utilisée par les ordinateurs. Les valeurs Float64 dans Go sont conformes à la norme IEEE-754, qui utilise 53 bits pour la partie fractionnaire. Cela signifie que 100,55 est approximé du nombre binaire représentable le plus proche, ce qui entraîne de légères divergences.
Considérez le code suivant :
package main import "fmt" func main() { x := 100.55 fmt.Println(x - float64(int(x))) }
L'exécution de ce code imprimera :
0.5499999999999972
au lieu de l'attendu 0.55.
Formateurs de chaînes (fmt.Printf)
Une façon de gérer cet écart consiste à arrondir le nombre à virgule flottante à la précision souhaitée avant l'impression.
package main import "fmt" func main() { x := 100.55 fmt.Printf("%.2f\n", x) }
Ce code prints :
0.55
Représentation à virgule flottante
Une autre approche consiste à éviter complètement d'utiliser des nombres à virgule flottante. Par exemple, pour représenter des montants en dollars, vous pouvez utiliser des cents comme nombres entiers et augmenter par 100 lors de l'affichage.
cents := 10055 fmt.Printf("%d.%d $\n", cents/100, cents%100)
Ce code s'imprime :
100.55 $
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!