ホームページ > バックエンド開発 > Golang > Go で `float64` を `int` に変換するときに精度エラーを回避するにはどうすればよいですか?

Go で `float64` を `int` に変換するときに精度エラーを回避するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-17 02:24:25
オリジナル
353 人が閲覧しました

How Can I Avoid Precision Errors When Converting `float64` to `int` in Go?

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 に格納される結果の数値が若干異なるためです。

解決策:

  1. 表示用に丸めます: 誤解を招く出力を避けるため、浮動小数点数を表示する前に丸めます。例:

    fmt.Printf("%.2f\n", x) // Outputs: 0.55
    ログイン後にコピー
  2. 計算に整数を使用する: 精度が重要な場合は、計算に整数を使用することを検討してください。たとえば、通貨をドルではなくセントで扱います。

結論:

バイナリ表現の制限を理解し、丸めや整数ベースの計算を使用すると、問題を軽減できます。 Go で float64 を int に変換するときに精度エラーが発生します。

以上がGo で `float64` を `int` に変換するときに精度エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート