ホームページ >バックエンド開発 >Golang >Go で浮動小数点を整数に変換する際の浮動小数点エラーを回避するにはどうすればよいですか?

Go で浮動小数点を整数に変換する際の浮動小数点エラーを回避するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-15 13:11:22474ブラウズ

How Can I Avoid Floating-Point Errors When Converting Floats to Integers in Go?

Golang: Float から Int への変換における浮動小数点エラーの回避

浮動小数点演算では、異なる数値型間で変換するときにエラーが発生する可能性があります。 Go では、浮動小数点表現の制限により、float64 を int に変換すると予期しない結果が生じる可能性があります。

浮動小数点表現について

コンピュータは通常、数値データをバイナリ形式で保存します。ただし、100.55 のような 10 進数は、2 進法では有限数として表すことができません。

IEEE-754 は、Go が float64 値を表すために使用する標準です。数字の格納に 53 ビット、指数に 11 ビットを使用し、有限範囲の数値を許容しますが、必然的に近似が生じます。

10 進数から 2 進数への変換

100.55 のような 10 進数を 2 進数に変換する場合float64 の内部表現を正確に表現することはできません。代わりに、最も近い 2 進数が使用され、元の値とはわずかに異なる値になります。

Float から Int への変換でエラーが発生しました

コード例では、float64(int(x )) は 0.55 になるはずですが、出力は 0.5499999999999972 に近くなります。このエラーは、float64(int(x)) が 100.55 ではなく 100.0 を表し、同じ数値の 2 つの異なる表現間で減算が実行されるために発生します。

解決策

精度エラーを回避するには、次のアプローチを検討してください:

  • 結果: fmt.Printf を適切な書式文字列とともに使用して、出力を目的の小数点以下の桁数に丸めます。
  • 浮動小数点数を避ける: 通貨または精度を伴うアプリケーションの場合計算では、浮動小数点エラーを排除するために、値を整数または有理数として表すことを検討してください。

以上がGo で浮動小数点を整数に変換する際の浮動小数点エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。