无法舍入到最接近的.0001

时间:2018-06-03 23:13:09

标签: go

我有以下内容:

package main

import (
    "fmt"
    "math"
)

func main() {
    nums := []float64{
        0.15807659924030304, 0.10901273787021637, 0.04955724626779556, 0.05886702239513397,
    }

    for _, f := range nums {
        fmt.Println(f, math.Round(f/.0001)*.0001)
    }
}

输出是:

0.15807659924030304 0.15810000000000002
0.10901273787021637 0.109
0.04955724626779556 0.049600000000000005
0.05886702239513397 0.0589

为什么有些人以>结尾? 4位小数?我该如何纠正?

https://play.golang.org/p/kLvVjmsjq6Y

1 个答案:

答案 0 :(得分:4)

        fmt.Printf("%f %b %0.4f\n", f, f, math.Round(f/.0001)*.0001)

尝试使用它。 %0.4f会将其格式化为4位小数。实际上,如果您只需要字符串,请使用它而不是Round函数。

%b将向您展示真正的价值。在Go中,将显示一个大的十进制(base-10)值,ap,然后是幂为2的指数。因此当它显示5695309707476992p-55时,你可以通过5695309707476992 / 2^55