现在的位置: 首页 > 综合 > 正文

js浮点数精度问题

2019年03月16日 ⁄ 综合 ⁄ 共 558字 ⁄ 字号 评论关闭

浮点数的实现原理,决定了浮点数会有一个悲剧,那就是计算0.3 + 0.3 + 0.3的值,你可以在控制台里面打印一下其结果,他的值不是你所期望的0.9,而是丑陋的0.899999999999999

如何处理这种情况呢。

现在提供3种方案

1,不用处理。为什么说不用处理呢?因为0.8999999999999999 和
0.9在使用时没有本质区别。

2,显示时处理。如果你要把0.3+0.3+0.3的结果呈现在用户眼前,丑陋的0.8999999999999999显然不是你所期望的结果。你所期望的是0。9.如何呈现0.9呢?那么就是再最终结果加一个不会严重影响结果真实性的补丁。看看加了这个补丁之后浮点数的位数是不是发生了改变,如果发生了很大改变,恭喜你,你这个补丁加对了。

3,计算时处理,如果你可以控制计算的过程,那么可以采取如下的做法吗,如计算0.3+0.3+0.3,你可以这样得到最终结果var
a = 0.3*10+0.3*10+0.3*10;a = a/10;这种方法本人非常不推崇,因为他是混淆了概念的方法,鄙视前牛定制规范的做法!!!

4,你对精度要求非常高,好吧,Float类型(暂且用“类型”这个不恰当的词)已经不适合你了,你应该自己实现一个全新的高精度的类型。具体方案这里就不说了,但是这已经实现这样的业务已经不适合用js语言了。

【上篇】
【下篇】

抱歉!评论已关闭.