Go spec: Conversions:
換算數值類型
當浮點數轉換爲整數之間,則該部分將被丟棄(向零截斷)。
所以基本上當你將一個浮點數轉換爲一個整數時,只保留整數部分。
如果您只是想避免由於使用有限位進行表示而出現錯誤,只需在將其轉換爲int
之前將該數字加上0.5
即可。不需要外部庫或函數調用(來自標準庫)。
由於float -> int
轉換不四捨五入但保持整數部分,這會給你想要的結果。同時考慮到可能更小和更大的代表性:
1002.9999 + 0.5 = 1003.4999; integer part: 1003
1003.0001 + 0.5 = 1003.5001; integer part: 1003
所以只是簡單地寫:
var f float64 = 1.003
fmt.Println(int(f * 1000 + 0.5))
爲了結束這種成一個函數:
func toint(f float64) int {
return int(f + 0.5)
}
// Using it:
fmt.Println(toint(f * 1000))
試戴的Go Playground。
注:
要小心,當你申請這個在負數的情況下!例如,如果您的值爲-1.003
,那麼您可能希望結果爲-1003
。但是,如果你添加0.5
它:
-1002.9999 + 0.5 = -1002.4999; integer part: -1002
-1003.0001 + 0.5 = -1002.5001; integer part: -1002
所以,如果你有負數,你必須要麼:中
- 減
0.5
,而不是將它添加
- 或從加
0.5
但減去1
結果
將此結合到我們的幫助函數中:
func toint(f float64) int {
if f < 0 {
return int(f - 0.5)
}
return int(f + 0.5)
}
我以前沒使用的包,但在看文檔,它肯定看起來好像四捨五入以後,你可以調用無格式()直接提取int值,而不是抓住一個字符串,並通過將其轉換strcon再次。 – AndrewN
啊,你是對的。完全忘記了。將更新代碼!謝謝! –