ホームページ >バックエンド開発 >Golang >Go で float64 を uint64 に正確に変換するにはどうすればよいですか?

Go で float64 を uint64 に正確に変換するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-20 00:12:27135ブラウズ

How to Accurately Convert a float64 to a uint64 in Go?

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 サイトの他の関連記事を参照してください。

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