Maison  >  Article  >  développement back-end  >  Existe-t-il un moyen sûr de convertir float64 en int64 dans Go ?

Existe-t-il un moyen sûr de convertir float64 en int64 dans Go ?

PHPz
PHPzavant
2024-02-08 21:50:34505parcourir

在 Go 中是否有安全的方法将 float64 转换为 int64?

L'éditeur PHP Zimo a une question sur la conversion en toute sécurité de float64 en int64 dans Go. Nous devons prendre en compte la perte de précision et le dépassement de plage. Dans Go, vous pouvez utiliser la fonction Round du package mathématique pour arrondir et convertir des nombres à virgule flottante en nombres entiers. Cependant, il convient de noter que si le nombre à virgule flottante dépasse la plage int64, une erreur de débordement peut se produire lors du processus de conversion. Afin d'éviter cette situation, nous pouvons utiliser la fonction IsNaN du package mathématique pour vérifier si le nombre à virgule flottante est NaN, puis le convertir pour garantir la sécurité de la conversion. Cela garantit que les problèmes de perte de précision et de dépassement de plage sont évités pendant le processus de conversion.

Contenu de la question

Je connais la fonction de conversion de type int()int64() fournie par Go. Considérant que le nombre à virgule flottante maximum représentable de 64 bits math.MaxFloat64 est beaucoup plus grand que math.MaxInt64, existe-t-il un moyen sûr de convertir int64 Convertir en int64 (avec troncature,) ? Un moyen de déclencher une erreur de débordement ? math.MaxFloat64math.MaxInt64 大得多,是否有一种安全的方法将 int64 转换为 int64带截断,)?一种触发溢出错误的方法?

解决方法

如果您要从 float64 转换(不是转换或类型转换)到 int64,那么您可以将浮点值与 math.maxint64math.minint64 的最接近的双精度整数值进行比较。这些数字无法精确存储在 float64

Solution de contournement

float64 值在这两个值之间,您就知道它可以转换为 int64Si vous convertissez (pas de conversion ou de transtypage) de float64 en int64, vous pouvez convertir la valeur à virgule flottante avec math.maxint64 code> est comparé à la valeur entière double précision la plus proche de <code>math.minint64. Ces nombres ne peuvent pas être stockés exactement dans des valeurs float64, mais ils seront stockés comme la valeur entière suivante au-dessus ou en dessous de ces nombres :

float64(math.MaxInt64) // 9223372036854775808
float64(math.MinInt64) // -9223372036854775808

Alors juste votre float64 可以准确表示 int64 以内的所有 int64 值,因为双精度浮点值仅包含 52 位精确。在这种情况下,您必须检查 int64 值是否在 -1<<531<<53 sans déborder.

Mais attention, si vous convertissez dans l'autre sens, il n'y a aucune garantie entre . math/big Dans les deux cas, vous pouvez utiliser le package p>🎜🎜 pour gérer des valeurs plus grandes. 🎜

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer