JavaScript小数在做四则运算时,精度会丢失,这会在项目中引起诸多不便,先请看下面脚本。

 //加减
 <script type="text/javascript" language="javascript">
 alert(/);//弹出: 0.3333333333333333
 alert(0.09999999 + 0.00000001);//弹出: 0.09999999999999999
 alert(-0.09999999 - 0.00000001);//弹出: -0.09999999999999999
 alert(0.012345 * 0.000001);//弹出: 1.2344999999999999e-8
 alert(0.000001 / 0.0001);//弹出: 0.009999999999999998
 </script>
 <script type="text/javascript" language="javascript">
 alert(/);//弹出: 0.3333333333333333
 alert(0.09999999 + 0.00000001);//弹出: 0.09999999999999999
 alert(-0.09999999 - 0.00000001);//弹出: -0.09999999999999999
 alert(0.012345 * 0.000001);//弹出: 1.2344999999999999e-8
 alert(0.000001 / 0.0001);//弹出: 0.009999999999999998
 </script>
 [code]
 按正常计算的话,除第一行外(因为其本身就不能除尽),其他都应该要得到精确的结果,从弹出的结果我们却发现不是我们想要的正确结果。为了解决浮点数运算不准确的问题,在运算前我们把参加运算的数先升级(10的X的次方)到整数,等运算完后再降级(.1的X的次方)。现收集并整理贴于此,以备后用。
 加法
 Js代码
 [code]
 //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
 //调用:accAdd(arg1,arg2)
 //返回值:arg1加上arg2的精确结果
 function accAdd(arg1,arg2){
 var r1,r2,m;
 ].length}}
 ].length}}
 m=Math.pow(,Math.max(r1,r2))
 return (arg1*m+arg2*m)/m
 }
 //给Number类型增加一个add方法,调用起来更加方便。
 Number.prototype.add = function (arg){
 return accAdd(arg,this);
 }
 //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
 //调用:accAdd(arg1,arg2)
 //返回值:arg1加上arg2的精确结果
 function accAdd(arg1,arg2){
 var r1,r2,m;
 ].length}}
 ].length}}
 m=Math.pow(,Math.max(r1,r2))
 return (arg1*m+arg2*m)/m
 }
 //给Number类型增加一个add方法,调用起来更加方便。
 Number.prototype.add = function (arg){
 return accAdd(arg,this);
 }
 减法
 Js代码
 [code]
 //说明:javascript的减法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的减法结果。
 //调用:accSub(arg1,arg2)
 //返回值:arg1减上arg2的精确结果
 function accSub(arg1,arg2){
 return accAdd(arg1,-arg2);
 }
 //给Number类型增加一个sub方法,调用起来更加方便。
 Number.prototype.sub = function (arg){
 return accSub(this,arg);
 }
 //说明:javascript的减法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的减法结果。
 //调用:accSub(arg1,arg2)
 //返回值:arg1减上arg2的精确结果
 function accSub(arg1,arg2){
 return accAdd(arg1,-arg2);
 }
 //给Number类型增加一个sub方法,调用起来更加方便。
 Number.prototype.sub = function (arg){
 return accSub(this,arg);
 }

 //说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
 //调用:accMul(arg1,arg2)
 //返回值:arg1乘以arg2的精确结果
 function accMul(arg1,arg2)
 {
 ,s1=arg1.toString(),s2=arg2.toString();
 ].length}catch(e){}
 ].length}catch(e){}
 ,m)
 }
 //给Number类型增加一个mul方法,调用起来更加方便。
 Number.prototype.mul = function (arg){
 return accMul(arg, this);
 }
 //说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
 //调用:accMul(arg1,arg2)
 //返回值:arg1乘以arg2的精确结果
 function accMul(arg1,arg2)
 {
 ,s1=arg1.toString(),s2=arg2.toString();
 ].length}catch(e){}
 ].length}catch(e){}
 ,m)
 }
 //给Number类型增加一个mul方法,调用起来更加方便。
 Number.prototype.mul = function (arg){
 return accMul(arg, this);
 } 除法
 Js代码
 //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
 //调用:accDiv(arg1,arg2)
 //返回值:arg1除以arg2的精确结果
 function accDiv(arg1,arg2){
 ,t2=,r1,r2;
 ].length}catch(e){}
 ].length}catch(e){}
 with(Math){
 r1=Number(arg1.toString().replace(".",""))
 r2=Number(arg2.toString().replace(".",""))
 ,t2-t1);
 }
 }
 //给Number类型增加一个div方法,调用起来更加方便。
 Number.prototype.div = function (arg){
 return accDiv(this, arg);
 }
 //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
 //调用:accDiv(arg1,arg2)
 //返回值:arg1除以arg2的精确结果
 function accDiv(arg1,arg2){
 ,t2=,r1,r2;
 ].length}catch(e){}
 ].length}catch(e){}
 with(Math){
 r1=Number(arg1.toString().replace(".",""))
 r2=Number(arg2.toString().replace(".",""))
 ,t2-t1);
 }
 }
 //给Number类型增加一个div方法,调用起来更加方便。
 Number.prototype.div = function (arg){
 return accDiv(this, arg);
 }

JavaScript 浮点数运算 精度问题的更多相关文章

  1. PHP浮点数运算精度造成的,订单金额支付经常少1分的问题

    最近碰见一个奇怪的问题,商城通过微信支付的订单经常少一分钱,经过排查是PHP浮点运算精度问题造成的 由PHP浮点数运算精度造成的,鸟哥的Bolg有详细的说明.http://www.laruence.c ...

  2. 如何避开JavaScript浮点数计算精度问题(如0.1+0.2!==0.3)

    不知道大家在使用JS的过程中有没有发现某些浮点数运算的时候,得到的结果存在精度问题:比如0.1 + 0.2 = 0.30000000000000004以及7 * 0.8 = 5.60000000000 ...

  3. JavaScript 浮点数运算的精度问题

    问题描述 在 JavaScript 中整数和浮点数都属于 Number 数据类型,所有数字都是以 64 位浮点数形式储存,即便整数也是如此. 所以我们在打印 1.00 这样的浮点数的结果是 1 而非 ...

  4. JavaScript浮点数运算的精度问题

    之前在做浮点数计算时,偶然发现计算结果有误差,度娘了解了下,补充整理了下. 误差是什么样子的呢?举例 console.log(0.1+0.2); // 0.30000000000000004 事实上在 ...

  5. 【转】javascript 浮点数运算问题

    大多数语言在处理浮点数的时候都会遇到精度问题,但是在JS里似乎特别严重,来看一个例子 alert(45.6*13); 结果居然是592.800000000001,当然加法之类的也会有这个问题 那这是j ...

  6. js对金额浮点数运算精度的处理方案

    浮点数产生的原因 浮点数转二进制,会出现无限循环数,计算机又对无限循环小数进行舍入处理 js弱语言的解决方案 方法一: 指定要保留的小数位数(0.1+0.2).toFixed(1) = 0.3;这个方 ...

  7. js浮点数运算精度问题

    https://www.cnblogs.com/yadongliang/p/9067333.html

  8. JavaScript 浮点数陷阱及解法

    众所周知,JavaScript 浮点数运算时经常遇到会 0.000000001 和 0.999999999 这样奇怪的结果,如 0.1+0.2=0.30000000000000004.1-0.9=0. ...

  9. JavaScript 浮点数处理

    众所周知,JavaScript 浮点数运算时经常遇到会 0.000000001 和 0.999999999 这样奇怪的结果,如 0.1+0.2=0.30000000000000004.1-0.9=0. ...

随机推荐

  1. Qt信号槽中槽函数为虚函数的一些感想

    有时候,在写connect的时候会去犹豫一个问题----我的槽函数到底需不需要为虚函数.这个问题在我每次写connect的时候我都会反问自己,因为确实,如果你不去深究里面的moc,你发现不了太多问题. ...

  2. cxf框架使用(一)

    1.创建调用接口 @WebService public interface IQueryBusinessService { public @WebResult(name="QueryBusi ...

  3. struts2.xml的配置与技巧

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-/ ...

  4. 基于OSGi的企业级快速开发平台(开源)

    模块化.插件化是未来的主流趋势,他很好的解决了,公司知识的积累.应用分发.商务模式.快速构建等一系列问题,国外著名的插件化平台JIRA就非常成功,国内的目前很多公司在偿试插件化的开发模式,作为平台推出 ...

  5. 从零开始学Sketch——入门篇-b

    如果你是一枚交互设计师或者UI设计师,那么你一定知道Sketch这个强大的矢量设计软件:如果你用过Photoshop,那么在你接触了Sketch之后就能了解到这款产品相对于PS的优点,说不定会跟我一样 ...

  6. X-SCAN扫描器插件(MYSQL弱口令以及Mongodb未授权)

    因为在很多时候的内网扫描里面没有授权的WIN的好用的,稍微小点的弱口令扫描器(生成报告,多种服务),编译成了插件,再自己弄了个MONGODB的扫描插件用着. X-SCAN加载以后: MONGODB.p ...

  7. sql server 2008 case when

    CASE WHEN的两种格式 1.简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END 2.Case搜索函数 CASE ...

  8. h.264 mvp求解过程

    h.264标准中由于分为宏块分割块(8x8),子宏块分割块(4x4),所以各种各样的求解过程比较繁琐 下面整理出标准中mvp的求解过程 8.4.1.3 已知条件有当前块的属性:位置.块类型需要得到当前 ...

  9. Win7 下用 VS2015 编译最新 openssl(1.0.2j)包含32、64位debug和release版本的dll、lib(8个版本)

    Win7 64位系统下通过VS2015编译好的最新的OpenSSL(1.0.2j)所有八个版本的链接库, 包含以下八个版本: 1.32位.debug版LIB: 2.32位.release版LIB: 3 ...

  10. 用于 Visual Studio 和 ASP.NET 的 Web 应用程序项目部署常见问题

    https://msdn.microsoft.com/zh-cn/library/ee942158(v=vs.110).aspx#can_i_exclude_specific_files_or_fol ...