我将9501 / 100.0f分为期望获得95.01f的结果,但由于某些不正常的原因,结果为95.01000000002f。
我知道舍入错误,并且划分两个较大的浮点数会产生不正确的结果,但这两个数字相对较小,并且不应该给出错误答案。
我已将浮动更改为双打,但只能看到相同的结果。
所以我的答案是,为什么我看到这个错误的输出?
最终解决方法而不将数字复制到字符串并返回。
答案 0 :(得分:6)
浮点数不精确,处理它们有很多特质。
What Every Computer Scientist Should Know About Floating-Point Arithmetic
我也很喜欢布鲁斯道森关于浮点值的blog entries。
答案 1 :(得分:1)
浮点数是以二进制表示的数字,精度有限。
预期结果与实际结果之间的误差是由于数字95.01在二进制表示中是无限周期的事实引起的。
Double只有51个二进制数字,因此在数字以双精度存储之前必须进行一些舍入。单精度只有23位数。
无法在有限精度浮点数中表示95.01而没有任何错误。 但是,您可以信任前6-9个十进制数字,因此您应该使用一些有意义的格式来格式化数字。
答案 2 :(得分:0)
浮点不精确,精度因机器而异。 1.0f!= 1.00000000000000000000000000000000000等等,它更像是1.0000001002003400011等等(我这里只选了任意数字)。