package main
import (
"fmt"
"math"
)
func main() {
x, y := math.NaN(), math.MaxFloat64
fmt.Printf("%d\n", int(x))
fmt.Printf("%d\n", int(y))
}
那是我的測驗代碼片段。當我使用 go1.14.2 運行上述代碼時,結果是
-9223372036854775808
-9223372036854775808
但同樣的代碼在 go1.17.2 中運行,結果是
0
9223372036854775807
我搜索了類似的問題:為什么在 Golang 中 NaN 和 MaxFloat64 的 uint64 相等?,這表示在不同的硬體環境中,math.NaN() 可能不同,但我在我的 MacOS M1 系統中運行代碼,只是 golang 版本不同。為什么 go1.14.2 和 go1.17.2 的結果不一樣?
uj5u.com熱心網友回復:
規格:轉換:
在涉及浮點或復數值的所有非常量轉換中,如果結果型別不能表示該值,則轉換成功,但結果值取決于實作。
您將浮點值轉換NaN為int. 該int型別的有效值不包括該NaN值,因此您轉換的值不能用 type 的值表示int,因此結果取決于實作。基本上,規范允許它從一個版本到另一個版本,從一個平臺到另一個平臺。您不能(不應該)int為轉換結果假設一個特定值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/463929.html
下一篇:如何正確設定Golang庫?
