Comment éviter la perte de précision dans Golang
Dans Golang, en raison des caractéristiques des calculs en virgule flottante, une perte de précision se produit parfois. Cet article partagera quelques méthodes pour éviter la perte de précision dans Golang et fournira des exemples de code spécifiques.
Le type float64 de Golang peut perdre en précision lorsqu'il s'agit de décimales. Pour éviter cette situation, nous pouvons utiliser le type Decimal de la bibliothèque tierce github.com/shopspring/decimal
au lieu de float64. github.com/shopspring/decimal
中的 Decimal 类型来代替 float64。
package main import ( "fmt" "github.com/shopspring/decimal" ) func main() { num1 := decimal.NewFromFloat(0.1) num2 := decimal.NewFromFloat(0.2) sum := num1.Add(num2) fmt.Println(sum) }
另一种避免精度丢失的方法是将小数转换为整数进行计算,然后再将结果转换回小数。
package main import "fmt" func main() { num1 := 1.23 num2 := 4.56 precision := 1000000 // 精度为小数点后六位 intNum1 := int(num1 * float64(precision)) intNum2 := int(num2 * float64(precision)) sum := intNum1 + intNum2 result := float64(sum) / float64(precision) fmt.Println(result) }
如果需要处理非常大的整数,可以使用 Golang 内置的 math/big
package main import ( "fmt" "math/big" ) func main() { num1 := new(big.Int) num1.SetString("12345678901234567890", 10) num2 := new(big.Int) num2.SetString("98765432109876543210", 10) sum := new(big.Int) sum.Add(num1, num2) fmt.Println(sum) }
math/big
intégré de Golang pour effectuer des calculs à éviter. le problème de la perte de précision. 🎜rrreee🎜Grâce à la méthode ci-dessus, nous pouvons éviter le problème de perte de précision dans Golang et garantir que nos résultats de calcul sont exacts. Cet article peut vous aider. 🎜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!