从int64转换为float64是否安全?

据我所知 int64 可以在 Go 中的 float64 中转换,语言允许使用float64(some_int64_variable),但我也知道并非所有 64 位有符号整数都可以用 double 表示(因为 IEE754 近似值)。

我们有一些代码可以使用美分接收商品的价格int64并执行类似的操作

const TB                    = 1 << 40

func ComputeSomething(numBytes int64) {
    Terabytes := float64(numBytes) / float64(TB)

我想知道这有多安全,因为并非所有整数都可以用双精度表示。

回答

取决于你所说的“安全”是什么意思。

是的,在某些情况下,这里可能会丢失精度。float64不能int64精确表示 的所有值(因为它只有 53 位尾数)。所以如果你需要一个完全准确的结果,这个函数并不“安全”;如果你想代表金钱,float64你可能会遇到麻烦。

另一方面,您真的需要绝对精确的 TB 数吗?将numBytes实际划分TB准确?这不太可能,但这完全取决于您的规格和需求。如果您的代码有一个字节计数器,并且您想显示大约有多少 TB(例如 0.05 TB 或 2.124 TB),那么这个计算就可以了。


以上是从int64转换为float64是否安全?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>