首頁 >後端開發 >Golang >如何在 Go 中安全地將 float64 轉換為 uint64?

如何在 Go 中安全地將 float64 轉換為 uint64?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-15 02:44:10212瀏覽

How to Safely Convert float64 to uint64 in Go?

正確將 float64 轉換為 uint64

嘗試在 Go 中將 float64 數字轉換為 uint64 時,可能會出現精確度問題。這通常會導致意外的行為,因為 float64 的小數部分在轉換過程中被丟棄。

說明問題:

package main

import "fmt"

func main() {
    var n float64 = 6161047830682206209
    fmt.Println(uint64(n))
}

此代碼將打印以下不正確的值:

6161047830682206208

問題

問題的根源差異在於Go 中常數和浮點數的表示方式。常數以任意精確度表示,而浮點數遵循 IEEE 754 標準。這意味著雖然常數可以表示沒有精確度損失的值,但浮點數可用於儲存數字的位數有限(float64 為 53 位元)。

要正確地將 float64 轉換為 uint64,必須確保 float64 數字可以在可用的 52 位元內精確表示。否則,精度將會遺失。您可以透過驗證 float64 值是否在 uint64 的可表示範圍內來完成此操作。

以下是在轉換之前檢查可表示性的函數範例:

func Float64ToUint64(n float64) (uint64, error) {
    if (n < 0) || (n > math.MaxUint64) {
        return 0, errors.New("value out of range")
    }
    return uint64(n), nil
}

以上是如何在 Go 中安全地將 float64 轉換為 uint64?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn