Maison >développement back-end >Golang >Comment convertir avec précision un float64 en un uint64 dans Go ?

Comment convertir avec précision un float64 en un uint64 dans Go ?

DDD
DDDoriginal
2024-12-20 00:12:27165parcourir

How to Accurately Convert a float64 to a uint64 in Go?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn