JavaScript浮點(diǎn)數(shù)運(yùn)算

參考資料:https://www.html.cn/archives/7340

單精度&雙精度

  • 單精度
    1符號(hào)位、8指數(shù)、23小數(shù)
1.png
  • 雙精度
    1符號(hào)位、11指數(shù)、52小數(shù)
2.png

浮點(diǎn)數(shù)

  • 概念:
    浮點(diǎn)數(shù)就是小數(shù)的二進(jìn)制表示法;
    指數(shù)位決定取值范圍;
    小數(shù)位決定精度;
  • 有效數(shù)字位:
    二進(jìn)制數(shù)有效數(shù)字的第一位默認(rèn)總是1,不保存在小數(shù)位中;
    故雙精度浮點(diǎn)數(shù)的有效數(shù)字位是53;

小數(shù)的計(jì)算:

0.1+0.2
1、十進(jìn)制——>二進(jìn)制
0.000100......(無(wú)限)+0.00......(無(wú)限)
2、將二進(jìn)制結(jié)果截取53位有效數(shù)字
3、二進(jìn)制結(jié)果——>十進(jìn)制數(shù);
0.30000000000000004

整數(shù)的計(jì)算:

需在1-2^53, 2^53-1的范圍內(nèi),超出范圍也會(huì)出現(xiàn)被舍去的精度問(wèn)題

Math.js類庫(kù)

  • Math.abs(x) 返回x的絕對(duì)值

  • Math.round() 四舍五入
    Math.ceil() 向上舍入
    Math.floor() 向下舍入

  • Math.pow(x,y) x的y次冪

其他js運(yùn)算方法

  • NumberObject.toFixed(x)
    返回,四舍五入為x個(gè)小數(shù)位的數(shù)值。

格式化數(shù)字方法

/*
 * 保留n位小數(shù),默認(rèn)2位
 * 123.132  => 123.13
 */
//eg.調(diào)用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;
};
/*
 * 格式化數(shù)字,用于前端展示  9,872,980.00 =>9,872,900
 * @s 保留n位小數(shù)
 */
//eg.調(diào)用formatNumber(1998.888777),返回1,998.89
export const formatNumber=(num,s=2)=>{
    if(判斷num是否為數(shù)字){
        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;
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容