Golang での精度低下を回避する方法
Golang では、浮動小数点演算の特性により、精度低下が発生することがあります。この記事では、Golang で精度の低下を回避するためのいくつかの方法を共有し、具体的なコード例を示します。
Golang の float64 型は、小数を扱うときに精度が失われる可能性があります。この状況を回避するには、float64 の代わりにサードパーティ ライブラリ github.com/shopspring/decimal
の Decimal 型を使用します。
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) }
精度の低下を避けるもう 1 つの方法は、計算のために小数を整数に変換し、結果を小数に変換し直すことです。
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) }
以上がGolang での精度の低下を回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。