首頁 > 後端開發 > Golang > 為什麼在 Go 中將 float64 轉換為 int 會產生意外結果?

為什麼在 Go 中將 float64 轉換為 int 會產生意外結果?

Patricia Arquette
發布: 2024-12-14 22:11:12
原創
751 人瀏覽過

Why Does Converting float64 to int in Go Produce Unexpected Results?

在Go 中將float64 轉換為int 時出錯

簡介

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板