Comment convertir correctement un numéro Float64 en UInt64
Considérez le code Go suivant :
package main func main() { var n float64 = 6161047830682206209 println(uint64(n)) }
L'attendu la sortie consiste à convertir le nombre float64 en un uint64, en préservant la valeur. Cependant, le résultat réel est 6161047830682206208, ce qui indique que la partie fractionnaire est ignorée.
Comprendre le problème
L'écart est dû aux limites de précision des nombres à virgule flottante. représenté en utilisant la norme IEEE 754. Dans IEEE 754, 53 bits sont alloués pour stocker les chiffres dans un nombre à virgule flottante de 64 bits (float64 en Go). Pour la constante donnée, le nombre de chiffres pouvant être représentés est inférieur au nombre de chiffres dans la constante elle-même.
Par conséquent, la constante ne peut pas être stockée avec précision dans une variable float64, et certains chiffres sont arrondis et perdu. Cela peut être confirmé en imprimant le numéro n float64 d'origine :
fmt.Printf("%f\n", n) fmt.Printf("%d\n", uint64(n))
Conversion correcte
Pour convertir correctement un numéro float64 en uint64, il est recommandé d'utiliser la fonction Trunc, qui tronque la partie fractionnaire d'un nombre float64 et renvoie l'entier part :
package main import "math" func main() { var n float64 = 6161047830682206209 println(uint64(math.Trunc(n))) }
Cette approche garantit que la valeur entière est convertie sans aucune perte de précision.
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!