编程新手,关于计算机存储数据的一个问题想请教一下大家。 比如下述代码: —————————————————————————————— double d = 0.3; System.out.printf("%.20f",d); —————————————————————————————— 其中 0.3 应该是不能准确表示成二进制,所以输出的时候从内存中读取 d 的值的时候应该会得到一个很接近 0.3 的数。但是实际最后输出的就是 0.3000...000 。如果把第一句改成 double d = 0.1 + 0.2 的话,结果就会变成 0.3000...0004000...000 了。后面这个结果是可以理解的。 请问前面这个能正确输出 0.3 是为什么呢?
在 C 下面: —————————————————————————————— double d = 0.3; printf("%.17f",d); —————————————————————————————— 输出的结果是 0.2999...999 。%0.17f 以下的输出都是输出 0.3000...000 ,我对这个的解释是发生了截断。不知道是不是这样?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.