在Go中,如何將float64轉換爲int?我知道strconv
包可用於將任何內容轉換爲字符串或從字符串中轉換,但不能在數據類型之間轉換,因爲數據類型不是字符串。我知道我可以使用fmt.Sprintf
將任何東西轉換爲字符串,然後strconv
它到我需要的數據類型,但這種額外的轉換看起來有點笨拙 - 有沒有更好的方法來做到這一點?在Go中將float64轉換爲int
48
A
回答
95
package main
import "fmt"
func main() {
var x float64 = 5.7
var y int = int(x)
fmt.Println(y) // outputs "5"
}
0
簡單地鑄造爲int截斷浮動,而如果你的系統在內部表示2.0爲1.9999999999,你不會得到你所期望的。各種printf轉換處理此問題,並在轉換時適當地舍入數字。因此,爲了得到更精確的值,轉換爲更加複雜的比你可能首先想到:
package main
import (
"fmt"
"strconv"
)
func main() {
floats := []float64{1.9999, 2.0001, 2.0}
for _, f := range floats {
t := int(f)
s := fmt.Sprintf("%.0f", f)
if i, err := strconv.Atoi(s); err == nil {
fmt.Println(f, t, i)
} else {
fmt.Println(f, t, err)
}
}
}
4
如果單純從float64爲int,這應該工作
package main
import (
"fmt"
)
func main() {
nf := []float64{-1.9999, -2.0001, -2.0, 0, 1.9999, 2.0001, 2.0}
//round
fmt.Printf("Round : ")
for _, f := range nf {
fmt.Printf("%d ", round(f))
}
fmt.Printf("\n")
//rounddown ie. math.floor
fmt.Printf("RoundD: ")
for _, f := range nf {
fmt.Printf("%d ", roundD(f))
}
fmt.Printf("\n")
//roundup ie. math.ceil
fmt.Printf("RoundU: ")
for _, f := range nf {
fmt.Printf("%d ", roundU(f))
}
fmt.Printf("\n")
}
func roundU(val float64) int {
if val > 0 { return int(val+1.0) }
return int(val)
}
func roundD(val float64) int {
if val < 0 { return int(val-1.0) }
return int(val)
}
func round(val float64) int {
if val < 0 { return int(val-0.5) }
return int(val+0.5)
}
輸出:
Round : -2 -2 -2 0 2 2 2
RoundD: -2 -3 -3 0 1 2 2
RoundU: -1 -2 -2 0 2 3 3
這裏是在操場上的代碼 - https://play.golang.org/p/HmFfM6Grqh
相關問題
- 1. 轉:將float64轉換爲帶有乘數的int
- 2. 在Haskell中將Maybe Int轉換爲Int
- 3. 在'C'中將int轉換爲int []
- 4. 將[Int?]轉換爲[Int]
- 5. 將int轉換爲int []
- 6. 將IO Int轉換爲Int
- 7. 如何將數字(int或float64)轉換爲Golang中的字符串
- 8. Go - 將表示二進制數的字符串轉換爲int
- 9. 將'numpy.ndarray'轉換爲float64在Python中失敗?
- 10. 在Arduino中將ASCII轉換爲int
- 11. 在python中將日期轉換爲Int
- 12. 在SQL Server中將INT轉換爲BIGINT
- 13. 在Android中將int轉換爲byte []
- 14. 在C#中將IntPtr轉換爲int *?
- 15. 在Swift中將Int轉換爲UInt32
- 16. 在Julia Lang中將float轉換爲int
- 17. 在C/C++中將int轉換爲bool
- 18. 在[swift]中將[AnyObject]轉換爲[Int] 3
- 19. 在.NET中將int轉換爲byte [4]
- 20. 在Python中將元組轉換爲int
- 21. 在F#中將float轉換爲int#
- 22. 在SQL中將文本轉換爲INT
- 23. 在C中將ObjectParameter轉換爲Int#
- 24. 將列var上的varchar轉換爲int列轉換爲int
- 25. 將int轉換爲char
- 26. java將int轉換爲short
- 27. 將char *轉換爲int
- 28. 將hexa轉換爲int
- 29. OCaml:將bool轉換爲/ int
- 30. 將int轉換爲雙Python
不知道是那麼簡單 - 謝謝! –
@David Grayson,那麼這個轉換和Math.Floor(x)是一樣的嗎,還是因爲float64將它保存在內存中而導致.7丟失? –
@DavidLarsen在Go規範中:「當將浮點數轉換爲整數時,分數被捨棄(截斷爲零)」。 ([Go spec](http://golang.org/ref/spec#Conversions)) – kvu787