go - fmt.Printf ("%f\n",x) 将 Float64 舍入为 Float32,但 fmt.Println(x) 不会

标签 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 时我没有遇到问题或 %g 并且文档指定他们将在适当的时候使用 %f

当我使用 %.12f 指定精度为 12 时,我没有遇到问题,但文档中没有指定默认精度。

为什么会这样?

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

最佳答案

From the docs :

The default precision for %e, %f and %#g is 6; for %g it is the smallest number of digits necessary to identify the value uniquely.

关于go - fmt.Printf ("%f\n",x) 将 Float64 舍入为 Float32,但 fmt.Println(x) 不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54223855/

相关文章:

go - 如何格式化包含动态数量元素的字符串?

git - 在每次提交时分别运行 go fmt 时,是否有任何工具会重新设置 Git 中的分支?

ssl - 从特定 IP 获取 HTTPS Assets 并跳过 DNS 查找

go - 在 Golang 中,我可以将 slice 值分配为返回值吗?

java - 为什么这个 GoLang 解决方案比等效的 Java 解决方案更快?

go - 有没有办法在不完全禁用 gofmt 的情况下防止 gofmt 将代码函数转换为多行?

datetime - 打印耗时时如何抑制日期

go - 结构数组,包括在Go中选择时会调用的函数

networking - 如何使用go编程语言在给定IP地址的情况下在网络上查找主机名

Go 等效于 C 的否定扫描集