首頁 >後端開發 >Golang >在 Go 中將 `float64` 轉換為 `int` 時如何避免精確度錯誤?

在 Go 中將 `float64` 轉換為 `int` 時如何避免精確度錯誤?

Barbara Streisand
Barbara Streisand原創
2024-12-17 02:24:25360瀏覽

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

避免Go 中Float 轉Int 的精確度錯誤

Go 中將float64 值轉換為int 時,程式設計師常會遇到精確度錯誤。這些錯誤的產生是由於計算機上二進制數表示的固有限制。

理解二進位表示

float64 表示使用 IEEE-754 標準的數字,分配 53位表示數字,11 位表示指數。然而,某些數字,如 100.55,無法在這個有限的二進位結構中精確表示。

代碼:

以下程式碼示範了該問題:

package main

import "fmt"

func main() {
    x := 100.55
    fmt.Println(x - float64(int(x)))    
}

此程式碼輸出 0.5499999999999997250.原因是二進位表示無法精確儲存 100.55,且 x 儲存的結果略有不同。

解決方案:

  1. 顯示舍入: 為了避免誤導輸出,請在顯示浮點數之前對其進行舍入。例如:

    fmt.Printf("%.2f\n", x) // Outputs: 0.55
  2. 使用整數進行計算:如果精確度至關重要,請考慮使用整數進行計算。例如,以美分而不是美元來處理貨幣。

結論:

了解二進位表示的限制並採用舍入或基於整數的計算可以緩解在Go 中將float64 轉換為int 時出現精度錯誤。

以上是在 Go 中將 `float64` 轉換為 `int` 時如何避免精確度錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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