美文网首页
js 浮点数运算处理

js 浮点数运算处理

作者: 泰然自若_750f | 来源:发表于2020-06-06 11:49 被阅读0次

js中在执行加减乘除运算时候会造成如下问题

    0.1+0.2===0.3 //false
   0.1+0.2=0.30000000000000004
   0.6+0.7===1.3 //false
   0.6+0.7=1.2999999999999998

下面通过特殊处理解决这一问题


 * 在原型写方法
 * 先将浮点数转为整数运算
 * 
 */
Number.prototype.addFloat=function(num2){
    

    var num1=this;
    return handleFloat.add(num1,num2)    
}

Number.prototype.subtractFloat=function(num2){
    var num1=this;
    return handleFloat.subtract(num1,num2)    
}

Number.prototype.multipleFloat=function(num2){
    var num1=this;
    return handleFloat.multiple(num1,num2)    
}
Number.prototype.divideFloat=function(num2){
    var num1=this;
    return handleFloat.divide(num1,num2)    
}


var  handleFloat={
    /**
     * 加法
     * @param {*} num1 
     * @param {*} num2 
     */
    add:function(num1,num2){
        let pow=handleFloat._getPointPow(num1,num2);
        
        return (num1*pow+num2*pow)/pow
    },
    /**
     * 减法
     * @param {*} num1 
     * @param {*} num2 
     */
    subtract:function(num1,num2){
      let pow=handleFloat._getPointPow(num1,num2);
      return (num1*pow-num2*pow)/pow
    },
    /**
     * 乘法
     * @param {*} num1 
     * @param {*} num2 
     */
    multiple:function(num1,num2)
    {
      let pow=handleFloat._getPointPow(num1,num2);
      return ((num1*pow)*(num2*pow))/(pow*pow)
    },
    /**
     * 除法
     * @param {*} num1 
     * @param {*} num2 
     */
    divide:function(num1,num2){
      let pow=handleFloat._getPointPow(num1,num2);
      return ((num1*pow)/(num2*pow))

    },
    /**
     * 获取两个数小数点的长度最大值,然后取10的次幂
     * @param {*} num1 
     * @param {*} num2 
     */

    _getPointPow:function(num1,num2){
      if(typeof num2!=='number')
      {
           throw new TypeError('数字不合法');
      }
      let pointLength1=0,pointLength2=0;
      //如果存在小数点
      if((num1+'').indexOf('.')){
          pointLength1=(num1+'').split('.')[1].length;
        
      }
      if((num2+'').indexOf('.')){
          pointLength2=(num2+'').split('.')[1].length;
      }
      return Math.pow(10,Math.max(pointLength1,pointLength2));

    }
}

测试

console.log(0.1.addFloat(0.2)); //0.3
console.log(0.6.addFloat(0.7)); //1.3
console.log(0.1.addFloat('s')); //0.5 // typeError

console.log(0.1.subtractFloat(0.2)); //-0.1
console.log(0.1.multipleFloat(0.2)); //0.02
console.log(0.1.divideFloat(0.2)); //0.5

相关文章

  • JS浮点数运算处理

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

  • js 浮点数运算处理

    js中在执行加减乘除运算时候会造成如下问题 下面通过特殊处理解决这一问题 测试

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

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

  • Javascript 盲点

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

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

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

  • javascript运算精度

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

  • 浮点数计算中的精度丢失

    1 js浮点数运算精度丢失 如果你用过js计算浮点数你肯定会遇到过下面这种情况:(我的小学白读了吗==。) (其...

  • js浮点数运算

    https://github.com/nefe/number-precision 阿里大佬封装好的浮点数运算直接拿去用

  • js 处理四则运算失去精度问题

    js 处理四则运算失去精度问题 计算精度,特别是浮点数计算。举个栗子 然后我寻求各种解决办法,其中用了lodash...

  • [Java] BigDecimal的使用

    BigDecimal BigDecimal位于java.math.BigDecimal包,用于处理浮点数高精度运算...

网友评论

      本文标题:js 浮点数运算处理

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