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 这是预期的strconv.ParseFloat()行为还是错误?我怎样才能避开它?_Go - Fatal编程技术网

Go 这是预期的strconv.ParseFloat()行为还是错误?我怎样才能避开它?

Go 这是预期的strconv.ParseFloat()行为还是错误?我怎样才能避开它?,go,Go,运行此代码以了解我的意思: SmallestNonzeroFloat64在中定义,我假设它可以由float64变量表示 但是,当使用strconv.ParseFloat()将其解析为float64并使用strconv.FormatFloat()打印时,结果是四舍五入的 我得到的不是4.940656458412465441765687928682213723651e-324(或者它的非指数等价物,你可以在围棋场结果中看到)。结果是四舍五入的 有没有办法取回4.9406564584124654417

运行此代码以了解我的意思:

SmallestNonzeroFloat64
在中定义,我假设它可以由float64变量表示

但是,当使用
strconv.ParseFloat()
将其解析为float64并使用
strconv.FormatFloat()
打印时,结果是四舍五入的

我得到的不是
4.940656458412465441765687928682213723651e-324
(或者它的非指数等价物,你可以在围棋场结果中看到)。结果是四舍五入的

有没有办法取回
4.940656458412465441765687928682213723651e-324

还是一个bug?

这不是bug。 你可以要求去打印更多的数字

fmt.Printf("SmallestNonzeroFloat64 = %.40g\n", SmallestNonzeroFloat64)
// 4.940656458412465441765687928682213723651e-324
然而,
5e-324
4.94…e-324
实际上是相同的值,所以Go打印
5e-324
没有错。该值(2-1074)是Float64表示的最小正数(在其他语言中也称为
double
)。较大的数字都是这个数的倍数,例如,下一个最小的数字是2×2-1074=
1e-323
,下一个是3×10-1074=
1.5e-323
,等等

换句话说,所有比
5e-324
更精确的数字都不能用Float64表示。因此,在“5”之后打印更多的数字是没有意义的。而且
5e-324
肯定比
4.94…e-324
更具可读性

这不是一个bug。 你可以要求去打印更多的数字

fmt.Printf("SmallestNonzeroFloat64 = %.40g\n", SmallestNonzeroFloat64)
// 4.940656458412465441765687928682213723651e-324
然而,
5e-324
4.94…e-324
实际上是相同的值,所以Go打印
5e-324
没有错。该值(2-1074)是Float64表示的最小正数(在其他语言中也称为
double
)。较大的数字都是这个数的倍数,例如,下一个最小的数字是2×2-1074=
1e-323
,下一个是3×10-1074=
1.5e-323
,等等


换句话说,所有比
5e-324
更精确的数字都不能用Float64表示。因此,在“5”之后打印更多的数字是没有意义的。而且
5e-324
肯定比
4.94…e-324
更具可读性

这澄清了问题。还有几行代码有助于确认:这就澄清了问题。还有几行代码有助于确认: