單精度&雙精度
- 單精度
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;
};