如何将golang math/big int转换为float?

use*_*998 2 go

我使用golang的bigint作为长期服务的计数器,统计计数器可能会长期溢出常规uint64; 但偶尔我需要计算一些类似于程序开始以来的平均费率?需要分工float(bigint) / time.Since(beginning).Seconds(); 在费率计算中,转换的精确度损失是可以接受的

https://golang.org/pkg/math/big/#Int.Uint64

但是这种float64(bigint)实际上并不起作用,我看到库有'bigint.Uint64()'转换但是如果溢出普通的uint64则它是未定义的; 我想知道为什么标准库没有提供.Float64()方法?是否有任何解决方法如何获得浮动

Jim*_*imB 10

您可以使用该方法将a转换big.Int为a .big.FloatFloat.SetInt

i := big.NewInt(12345)
f := new(big.Float).SetInt(i)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用f可接受的精度转换为float64,或使用big.Float方法更精确地计算输出.