登录
首页 >  Golang >  Go问答

Golang - 如何将指数和尾数转换为 float64 或 float32

来源:stackoverflow

时间:2024-04-16 23:45:33 337浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《Golang - 如何将指数和尾数转换为 float64 或 float32》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

我有一个库,可以提供尾数和指数值中的浮点数,而不会损失精度。

mantissa: 375400000000000
exponent: -9

如何在 golang 中将其转换为 float32 或 float64?

我在这里尝试了一下,但数字肯定没有正确显示:https://go.dev/play/p/8wmxhq11qws

package main

import (
    "fmt"
    "math/big"
)

func main() {
    mantissa := 375600000000000
    exp := int8(-9)

    var price big.Float
    mant := big.NewFloat(float64(mantissa))
    price.SetMantExp(mant, int(exp))

    fmt.Println("price: ", price.String())
    fmt.Println("mant: ", mantissa)
    fmt.Println("exp: ", exp)
}

显然这不起作用,因为 big.float 由 sign × 尾数 × 2**exponent 表示 当我需要 sign x 尾数 x 10 ^ exp


正确答案


我认为最明显的解决方案是使用 math 包中的 pow10 函数:

package main

import (
    "fmt"
    "math"
)

func main() {
    mantissa := 375600000000000
    exp := int8(-9)

    price := float64(mantissa) * math.Pow10(int(exp))

    fmt.Println("price: ", price)
    fmt.Println("mant: ", mantissa)
    fmt.Println("exp: ", exp)
}

此函数对于指数的所有可能值都有效,但精度可能会降低,具体取决于尾数的值。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>