为什么从float64到int的转换会导致值增加1?

630948893921274879float64 类型转换为 int 时,我希望结果为630948893921274879. 但是,实际结果是630948893921274880,比 1 大。

这是什么原因?

import (
    "fmt"
)

func main() {
    var p float64 = 630948893921274879
    fmt.Println(int(p))   // 630948893921274880
    fmt.Printf("%fn", p) // 630948893921274880.000000
}

https://play.golang.org/p/gbXKCkZ6_rF

回答

float64不会比int64“免费”变得“更大”。它在精度和范围之间进行权衡。

达到一定量级后,整数只能表示为最接近的 2。当你变得更大时,你最终会跳过每 4,然后每 8,依此类推。


回答

630948893921274879 大于不舍float64入可以编码的最大整数。“浮点数”(即浮点数)的工作方式与科学记数法相同。它们存储一定数量的有效数字,然后将其乘以 2 的某个幂。630948893921274879 需要比 float64 可以容纳的更多有效数字,因此它会四舍五入到它可以表示的最接近的值。

如果您需要处理这么大的整数,则需要一直使用整数。您不能转换为浮点值。


以上是为什么从float64到int的转换会导致值增加1?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>