在Go 中將浮點數(float64) 轉換為整數(int)可能會導致由於浮點表示的限制,出現了意想不到的結果。
像 100.55 這樣的十進制數無法使用計算機使用的內部表示形式的有限位數的二進制來精確表示。 Go 中的 Float64 值符合 IEEE-754 標準,該標準使用 53 位元作為小數部分。這意味著 100.55 近似於最接近的可表示的二進制數,從而導致輕微的差異。
考慮以下程式碼:
package main import "fmt" func main() { x := 100.55 fmt.Println(x - float64(int(x))) }
執行此程式碼將列印:
0.5499999999999972
而不是預期的0.55.
而不是預期的0.55.解決方案字串格式化程序(fmt.Printf)
package main import "fmt" func main() { x := 100.55 fmt.Printf("%.2f\n", x) }
處理此差異的一種方法是在列印之前將浮點數舍入到所需的精度。
0.55
這段程式碼prints:
非浮點表示cents := 10055 fmt.Printf("%d.%d $\n", cents/100, cents%100)
另一個方法是完全避免使用浮點數。例如,要表示美元金額,您可以使用分作為整數,並在顯示時以 100 縮放。
100.55 $
以上是為什麼在 Go 中將 float64 轉換為 int 會產生意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!