Maison >développement back-end >Golang >Comment convertir en toute sécurité float64 en uint64 dans Go ?
Lorsque vous essayez de convertir un nombre float64 en uint64 dans Go, des problèmes de précision peuvent survenir. Cela entraîne souvent un comportement inattendu, car le composant fractionnaire de float64 est ignoré lors de la conversion.
Pour illustrer le problème :
package main import "fmt" func main() { var n float64 = 6161047830682206209 fmt.Println(uint64(n)) }
Ce code affichera la valeur incorrecte suivante :
6161047830682206208
Le problème
La racine du problème réside dans les différences entre la façon dont les constantes et les nombres à virgule flottante sont représentés dans Go. Les constantes sont représentées avec une précision arbitraire, tandis que les nombres à virgule flottante suivent la norme IEEE 754. Cela signifie que même si les constantes peuvent représenter des valeurs sans perte de précision, les nombres à virgule flottante ont un nombre limité de bits (53 pour float64) disponibles pour stocker les chiffres.
La solution
Pour convertir correctement un float64 en uint64, vous devez vous assurer que le nombre float64 peut être représenté avec précision dans les 52 bits disponibles. Sinon, la précision sera perdue. Vous pouvez le faire en vérifiant que la valeur float64 se situe dans la plage représentable de uint64.
Vous trouverez ci-dessous un exemple de fonction qui vérifie la représentabilité avant le casting :
func Float64ToUint64(n float64) (uint64, error) { if (n < 0) || (n > math.MaxUint64) { return 0, errors.New("value out of range") } return uint64(n), nil }
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!