Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 无法舍入到最接近的0.0001_Go - Fatal编程技术网

Go 无法舍入到最接近的0.0001

Go 无法舍入到最接近的0.0001,go,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.Ro

我有以下资料:

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位小数结束?我如何纠正它

试着用那个。
%0.4f
将其格式设置为小数点后4位。事实上,如果您只需要字符串,请使用它而不是Round函数

%b
将显示实际值。在Go中,将显示一个大的十进制(以10为基数)值,一个p,然后是2的幂指数。因此,当它显示
569530970747692P-55
时,您可以通过执行
5695309707476992/2^55

试着用那个。
%0.4f
将其格式设置为小数点后4位。事实上,如果您只需要字符串,请使用它而不是Round函数


%b
将显示实际值。在Go中,将显示一个大的十进制(以10为基数)值,一个p,然后是2的幂指数。因此,当它显示
5695309074746992P-55
时,您可以通过执行
5695309074746992/2^55

fmt.Println(f,math.Round(f/.0001)/10000)基本计算机浮点:实际值存储在二进制基数-2中。您正在显示的是base-10。任何不能完全被2整除的值在二进制浮点中都不能精确。它从来都不是你认为你拥有的分数。可能是.fmt.Println(f,math.Round(f/.0001)/10000)基本计算机浮点的重复:实际值存储在二进制基数-2中。您正在显示的是base-10。任何不能完全被2整除的值在二进制浮点中都不能精确。它从来都不是,永远都不是你认为你拥有的分数。可能是的重复。但这给了我一个字符串,而不是一个float@MarissaLevy我不知道你需要什么。如果你需要一个float,那么你就需要Round方法,就像你做的那样。不用担心…我想我不是很具体。但是这给了我一个字符串,而不是一个float@MarissaLevy我不知道你需要什么。如果你需要一个浮点数,那么你就需要圆的方法,就像你做的那样。不用担心……我想我不是很具体。
        fmt.Printf("%f %b %0.4f\n", f, f, math.Round(f/.0001)*.0001)