如何将float64(存储为base-2)转换为基数为10的系数和指数?

时间:2015-08-14 13:23:36

标签: go decimal floating-point-conversion

我正在寻找一种算法,该算法采用64位浮点数并输出指数和系数,因此输入可以float64 input = coefficient * 10 ^ exponent的形式表示。

据说这不是“微不足道”,Golang的许多精确十进制格式的实现(没有内置的十进制类型)对它有一些破解,比如转换为字符串并解析它。虽然这个解决方案确实适用于我见过的软件包,但这似乎是“适当的”以数学/计算机科学的方式进行。

1 个答案:

答案 0 :(得分:0)

可能不是100%精确,但您可以使用Log10:

package main

import (
  "fmt"
  "math"
)

func parts(v float64) (float64, int) {
  e := math.Floor(math.Log10(v))
  c := v / math.Pow(10, e)
  return c, int(e)
}

func main() {
  c, e := parts(1348.234e134)
  fmt.Printf("%v * 10^%v", c, e) // 1.3482339999999997 * 10^137
}