Go での Float から Int への変換における精度エラーの回避
Go で float64 値を int に変換するとき、プログラマは精度エラーに遭遇することがよくあります。これらのエラーは、コンピュータの 2 進数表現の固有の制限によって発生します。
2 進数表現について
float64 は、IEEE-754 標準を使用して数値を表し、53 を割り当てます。数字の場合は 1 ビット、指数の場合は 11 ビットです。ただし、100.55 などの特定の数値は、この有限のバイナリ構造内で正確に表すことができません。
コード:
次のコードは、この問題を示しています:
package main import "fmt" func main() { x := 100.55 fmt.Println(x - float64(int(x))) }
このコードは代わりに 0.5499999999999972 を出力します予想される0.55の。その理由は、バイナリ表現では 100.55 を正確に格納できず、x に格納される結果の数値が若干異なるためです。
解決策:
表示用に丸めます: 誤解を招く出力を避けるため、浮動小数点数を表示する前に丸めます。例:
fmt.Printf("%.2f\n", x) // Outputs: 0.55
結論:
バイナリ表現の制限を理解し、丸めや整数ベースの計算を使用すると、問題を軽減できます。 Go で float64 を int に変換するときに精度エラーが発生します。
以上がGo で `float64` を `int` に変換するときに精度エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。