美文网首页
解决js浮点数运算不准确的函数

解决js浮点数运算不准确的函数

作者: Mr无愧于心 | 来源:发表于2019-01-07 10:38 被阅读0次

针对:js在浮点数运算时会出现多位小数的不准确结果

  1. 乘法运算函数
  • 原理:给两个数计算小数点后边的位数和M,在清除小数点,相乘后在开M方。(除法一样)
function accMul(arg1,arg2){
    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){}
    console.log((Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)).toFixed(2))
    return (Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)).toFixed(2);
}

减法运算函数

  • 原理:取小数最多的那个数的小数点位数M,两个数分别乘以10的M次方,做差后在除以M(加法一样)
function accSub(arg1, arg2) {
    if (isNaN(arg1)) {
        arg1 = 0;
    }
    if (isNaN(arg2)) {
        arg2 = 0;
    }
    arg1 = Number(arg1);
    arg2 = Number(arg2);

    var r1, r2, m, n;
    try {
        r1 = arg1.toString().split(".")[1].length;
    }
    catch (e) {
        r1 = 0;
    }
    try {
        r2 = arg2.toString().split(".")[1].length;
    }
    catch (e) {
        r2 = 0;
    }
    m = Math.pow(10, Math.max(r1, r2));  //动态控制精度长度
    n = (r1 >= r2) ? r1 : r2;
    return ((arg1 * m - arg2 * m) / m).toFixed(n);
}

相关文章

  • 解决js浮点数运算不准确的函数

    针对:js在浮点数运算时会出现多位小数的不准确结果 乘法运算函数 原理:给两个数计算小数点后边的位数和M,在清除小...

  • Javascript 盲点

    1.javestript 中所有的数字都是浮点型 js在浮点数运算时会出现多位小数的不准确结果,浮点数运算的误差。...

  • js浮点数运算不准确

    JavaScript的计算结果: // 加法 =====================// 0.1 + 0.2 ...

  • iOS开发浮点数计算精度问题

    1、浮点数运算带来的问题 在日常工作中涉及到浮点数(float、double)的运算 2、浮点数运算精度的解决方案...

  • js精度问题

    关于js浮点数计算精度不准确问题的解决办法 今天在计算商品价格的时候再次遇到js浮点数计算出现误差的问题,以前就一...

  • js浮点数运算问题---莫名出现多位小数

    问题:js浮点数运算问题---莫名出现多位小数 // 原因:这是由于在运算的时候先把浮点数转化成二进制后进行运算,...

  • JS浮点数运算处理

    一. 问题描述 最近在做一个项目,页面上会存在一些JS浮点数的运算,发现JS浮点数运算存在一些bug.譬如: 0...

  • js浮点数运算问题--莫名出现多位小数

    问题:js浮点数运算时,莫名出现多位小数 原因:这是由于在运算的时候先把浮点数转化成二进制后进行运算,但是有的小数...

  • javascript运算精度

    一个经典的浮点数运算0.1+0.2 ==0.30000000000000004 js在运算的时候会把10进制转化为...

  • 前端(运算符)

    与或运算 Unicode编码 相等运算符 条件运算符 js操作属性 js函数

网友评论

      本文标题:解决js浮点数运算不准确的函数

      本文链接:https://www.haomeiwen.com/subject/sdrznftx.html