zoukankan      html  css  js  c++  java
  • Javascript保证精度的小数乘法

      众所周知,js的小数乘法很容易丢失精度,这是一件很恶心的事情。
    所以我写了这个方法,保证计算精度。

    /** * js小数乘法 *@parameter arg1:被乘数(接受小数和整数) *@parameter arg2:乘数(接受小数和整数) *@parameter fix: 乘积保留几位(接受正负整数以及0) */ function accMul(arg1,arg2,fix) { if(!parseInt(fix)==fix) { return; } var m=0,s1=arg1.toString(),s2=arg2.toString(); try{m+=s1.split(".")[1].length}catch(e){} try{m+=s2.split(".")[1].length}catch(e){} if(m>fix){ return (Math.round(Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m-fix))/Math.pow(10,fix)); }else if(m<=fix){ return (Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)).toFixed(fix); }else{ return (arg1*arg2).toFixed(fix); } }
    另外附上 我的测试用例,不全或者有误的地方,欢迎指点批评,谢谢!
    document.writeln("3472.45*0.3 = 1041.735 保留2位: "+accMul(3472.45, 0.3,2)+"<br/>"); document.writeln("3472.45*0.3 = 1041.735 保留1位"+accMul(3472.45, 0.3,1)+"<br/>"); document.writeln("3472.45*0.3 = 1041.735 保留0位"+accMul(3472.45, 0.3,0)+"<br/>"); document.writeln("3472.45*0.3 = 1041.735 保留-1位"+accMul(3472.45, 0.3,-1)+"<br/>"); document.writeln("347245*0.3 = 104173.5 保留2位"+accMul(347245, 0.3,2)+"<br/>"); document.writeln("347245*0.3 = 104173.5 保留1位"+accMul(347245, 0.3,1)+"<br/>"); document.writeln("347245*0.3 = 104173.5 保留0位"+accMul(347245, 0.3,0)+"<br/>"); document.writeln("347245*0.3 = 104173.5 保留-1位"+accMul(347245, 0.3,-1)+"<br/>"); document.writeln("347245*3 = 1041735 保留2位"+accMul(347245, 3,2)+"<br/>"); document.writeln("347245*3 = 1041735 保留1位"+accMul(347245, 3,1)+"<br/>"); document.writeln("347245*3 = 1041735 保留0位"+accMul(347245, 3,0)+"<br/>"); document.writeln("347245*3 = 1041735 保留-1位"+accMul(347245, 3,-1)+"<br/>"); document.writeln("0.5*0.3 = 0.15 保留3位"+accMul(0.5, 0.3,3)+"<br/>"); document.writeln("0.5*0.3 = 0.15 保留2位"+accMul(0.5, 0.3,2)+"<br/>"); document.writeln("0.5*0.3 = 0.15 保留1位"+accMul(0.5, 0.3,1)+"<br/>"); document.writeln("0.5*0.3 = 0.15 保留0位"+accMul(0.5, 0.3,0)+"<br/>"); document.writeln("0.5*0.3 = 0.15 保留-1位"+accMul(0.5, 0.3,-1)+"<br/>"); document.writeln("0.5*0.3 = 0.15 保留-2位"+accMul(0.5, 0.3,-2)+"<br/>"); document.writeln("0.5*0.3 = 0.15 保留-3位"+accMul(0.5, 0.3,-3)+"<br/>");

      

  • 相关阅读:
    通讯录封装实现
    简单通讯录的实现 main..h .m文件全部
    iOS 开发 OC编程 字典和集合 排序方法
    iOS 开发 OC编程 数组冒泡排序.图书管理
    iOS 开发 OC编程 属性和字符串练习
    iOS 开发 OC编程 属性和字符串
    iOS 开发 OC编程 便利构造器以及初始化方法
    iOS 开发 OC编程 方法的书写
    IOS 开发 OC编程 类和对象
    iOS 开发 c语言阶段考试题
  • 原文地址:https://www.cnblogs.com/caoyusongnet/p/5438850.html
Copyright © 2011-2022 走看看