导航

陷阱,陷阱,JS浮点运算存在陷阱

Posted on 2011-01-20 18:21  MyNet  阅读(841)  评论(1编辑  收藏  举报

你的JS是否还有这样的代码:

 

  YgAlterCR=((stringToFloat(YgAlterAmount)-stringToFloat(NewYgAlterAmount);

 

上面的代码还好,如果是下面的代码就悲剧了:

 

  if (fAmount == fAmountTotle - fAmountByContract)

 

因为JS的加减乘除法存在陷阱,我们的程序常被客户鄙视,认为1+1不等于2的错误,很是影响公司形象,具体陷阱如下:

 

JS浮点计算错误举例:

 

加法
  98.92+0.4= 99.32000000000001
  98.52+0.6=99.11999999999999


减法
  99.12-0.6=98.52000000000001
  99.32-0.4=98.91999999999999


除法
  212.59/2.25=94.48444444444445


乘法
  98.92*0.4=39.568000000000005

 

当客户的业务数据刚好符合上面规则时,完了,明明1-1=0,就是提示不相等。

 

建议我们的程序禁止JS代码直接使用+-*/,解决方案很多,百度一下就知道了哈。