Float64 数値を UInt64 に適切に変換する方法
次の Go コードを考えてみましょう。
package main func main() { var n float64 = 6161047830682206209 println(uint64(n)) }
期待される出力は、値を保持したまま、float64 数値を uint64 に変換します。ただし、実際の出力は 6161047830682206208 で、小数部分が破棄されていることを示します。
問題の理解
浮動小数点数の精度制限により不一致が発生します。 IEEE 754 標準を使用して表現されます。 IEEE 754 では、64 ビット浮動小数点数 (Go では float64) の数字を格納するために 53 ビットが割り当てられます。指定された定数について、表現できる桁数は定数自体の桁数よりも少ないです。
したがって、定数を float64 変数に正確に格納することはできず、一部の桁は丸められ、失った。これは、元の n float64 数値を出力することで確認できます。
fmt.Printf("%f\n", n) fmt.Printf("%d\n", uint64(n))
正しい変換
float64 数値を uint64 に適切に変換するには、以下を使用することをお勧めします。 Trunc 関数。float64 数値の小数部を切り捨てて整数を返します。 part:
package main import "math" func main() { var n float64 = 6161047830682206209 println(uint64(math.Trunc(n))) }
このアプローチにより、精度を損なうことなく整数値が変換されます。
以上がGo で float64 を uint64 に正確に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。