避免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 儲存的結果略有不同。
解決方案:
顯示舍入: 為了避免誤導輸出,請在顯示浮點數之前對其進行舍入。例如:
fmt.Printf("%.2f\n", x) // Outputs: 0.55
結論:
了解二進位表示的限制並採用舍入或基於整數的計算可以緩解在Go 中將float64 轉換為int 時出現精度錯誤。
以上是在 Go 中將 `float64` 轉換為 `int` 時如何避免精確度錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!