【问题标题】:How to convert math/big.Int to float64?如何将 math/big.Int 转换为 float64?
【发布时间】:2017-02-27 20:00:06
【问题描述】:

我在长期运行的服务中使用 Go 的 big.Int 作为计数器,从长远来看,统计计数器可能会溢出常规的 uint64。有时我需要计算类似“自程序开始以来的平均费率是多少?”,需要像float64(big.Int) / time.Since(beginning).Seconds() 这样的除法;在速率计算中,转换的精度损失是可以接受的。

但是这种float64(big.Int) 转换不起作用。 我看到包裹上有一个 big.Int.Uint64 转换方法,但如果值溢出常规uint64,则未定义。 我想知道为什么标准库不提供 to Float64() 方法,是否有任何解决方法如何获取浮点值?

【问题讨论】:

    标签: go


    【解决方案1】:

    您可以使用Float.SetInt 方法将big.Int 转换为big.Float

    i := big.NewInt(12345)
    f := new(big.Float).SetInt(i)
    

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

    【讨论】:

    • 谢谢;我再次阅读了文档,刚刚意识到func (z *Float) SetInt(x *Int) *Float 正是我所需要的
    • 您也可以使用big.Rat 进行您提到的持续时间划分,具体取决于您对准确性的担心程度。
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 2018-12-09
    相关资源
    最近更新 更多