我看到一些将float32转换为int32的奇怪行为:
var f float32 = math.MaxInt32
fmt.Printf("%d %0.1f %d\n", math.MaxInt32, f, int32(f))
打印
2147483647 2147483648.0 -2147483648
(在Go Playground:https://play.golang.org/p/SI0RtpZFkwa)
我的猜测是,这里发生了一些事情,例如通用的IEEE浮点不精确度和不受限制的自动转换。我几乎会想到“一举成名”的错误,但是为什么要进行符号转换?
看起来像个错误,但至少,这是令人惊讶的。这出现在一个较大的系统中,该系统开始在边缘出现异常行为。
最终,我只希望能够以某种合理的方式将float32
的值转换为int32
。