JavaScript浮点数运算

2019-01-15  本文已影响0人  米米1498

参考资料:https://www.html.cn/archives/7340

单精度&双精度

1.png 2.png

浮点数

小数的计算:

0.1+0.2
1、十进制——>二进制
0.000100......(无限)+0.00......(无限)
2、将二进制结果截取53位有效数字
3、二进制结果——>十进制数;
0.30000000000000004

整数的计算:

需在1-2^53, 2^53-1的范围内,超出范围也会出现被舍去的精度问题

Math.js类库

其他js运算方法

格式化数字方法

/*
 * 保留n位小数,默认2位
 * 123.132  => 123.13
 */
//eg.调用setDecimalBit(1998.888777),返回1998.89
export const setDecimalBit=(number,n=2)=>{
    if(isNumber(number)){
        number=(Math.round(  number*Math.pow(10,n)  )*  Math.pow(0.1,n));//eg.jslog:1998.8900000000003
                number=number..toFixed(n);//eg.jslog:1998.89
        number=number.split('.');
        number=[number[0],number[1].slice(0,n)].join('.');
    };
    return number;
};
/*
 * 格式化数字,用于前端展示  9,872,980.00 =>9,872,900
 * @s 保留n位小数
 */
//eg.调用formatNumber(1998.888777),返回1,998.89
export const formatNumber=(num,s=2)=>{
    if(判断num是否为数字){
        num=setDecimalBit((num),s);
        num=num.toString().split('.');
        //eg.jslog:num=1998,89
        let m=num[0].split('').reverse();
        //eg.jslog:m=8,9,9,1
        for(let i=1,j=0,q=Math.ceil(m.length/3);i<q;i++){
            m.splice(3*i+j,0,',');
            //eg.jslog:i=0,j=1,m=8,9,9,,,1
            j++;
        };
        m=m.reverse().join('');//eg.jslog:m=1,998
        if(num[1]){
            m=[m,num[1]].join('.');
        };
        return m;
    };
    return num;
};
上一篇下一篇

猜你喜欢

热点阅读