当前位置: 代码迷 >> JavaScript >> js浮点丢失有关问题
  详细解决方案

js浮点丢失有关问题

热度:530   发布时间:2013-07-08 14:13:00.0
js浮点丢失问题
  1. //加法???
  2. Number.prototype.add?=?function(arg){ ??
  3. ????var?r1,r2,m; ??
  4. ????try{r1=this.toString().split(".")[1].length}catch(e){r1=0} ??
  5. ????try{r2=arg.toString().split(".")[1].length}catch(e){r2=0} ??
  6. ????m=Math.pow(10,Math.max(r1,r2)) ??
  7. ????return?(this*m+arg*m)/m ??
  8. } ??
  9. ?
  10. //减法???
  11. Number.prototype.sub?=?function?(arg){ ??
  12. ????return?this.add(-arg); ??
  13. } ??
  14. ?
  15. //乘法???
  16. Number.prototype.mul?=?function?(arg) ??
  17. { ??
  18. ????var?m=0,s1=this.toString(),s2=arg.toString(); ??
  19. ????try{m+=s1.split(".")[1].length}catch(e){} ??
  20. ????try{m+=s2.split(".")[1].length}catch(e){} ??
  21. ????return?Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m) ??
  22. } ??
  23. ?
  24. //除法???
  25. Number.prototype.div?=?function?(arg){ ??
  26. ????var?t1=0,t2=0,r1,r2; ??
  27. ????try{t1=this.toString().split(".")[1].length}catch(e){} ??
  28. ????try{t2=arg.toString().split(".")[1].length}catch(e){} ??
  29. ????with(Math){ ??
  30. ????????r1=Number(this.toString().replace(".","")) ??
  31. ????????r2=Number(arg.toString().replace(".","")) ??
  32. ????????return?(r1/r2)*pow(10,t2-t1); ??
  33. ????} ??
  34. }??
测试
?
Js代码
  1. <script?type="text/javascript"?language="javascript"> ??
  2. ???alert(Number(0.09999999).add(0.00000001));//弹出:?0.1???
  3. ???//注意,如果是负数,一定要先使用Number转型,否则结果不正确???
  4. ???alert(Number(-0.09999999).sub(0.00000001));//弹出:?-0.1???
  5. ???alert(Number(0.012345).mul(0.000001));//弹出:?1.2345e-8???
  6. ???alert(Number(0.000001).div(0.0001));//弹出:?0.01???
  7. </script> ?
  相关解决方案