fmt.Printf(“%f \ n”,x)将Float64舍入为Float32,但是fmt.Println(x)不会

时间:2019-01-16 19:16:29

标签: go gofmt

我正在使用字典进行一些测试,为此,我从数据库中打印了我想要的Float64值,并将其复制并粘贴到我的测试结构数组中,但是当我的测试失败时,我注意到这些值不同,但仅0.0000000000002

然后,要检查值,我在循环中编写了以下内容:

fmt.Printf("%f\n",value)
fmt.Println(value)

我得到了以下值:

702.200000
702.1999999999998
5683.090000
5683.089999999998
975.300000
975.3

我检查了文档,没有发现任何指示Float64的特殊符号,或者%f将Float64替换为Float32,但是,当我使用%v或{{1 }}和文档指定在适当的时候将使用%g

当我使用%f指定精度为12时也没有问题,但是在文档中未指定默认精度。

为什么会这样?

编辑:这与重复项是相同的问题,但是我相信Adrien对此的解释会更详细。

1 个答案:

答案 0 :(得分:3)

From the docs

  

%e,%f和%#g的默认精度为6;对于%g,它是唯一标识该值所需的最少位数。