js浮点数精度问题

浮点数的实现原理,决定了浮点数会有一个悲剧,那就是计算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语言了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值