JS__浮点、数值问题

一、JS能够正确表示的整数

Math.pow(2,53) //即9007199254740996
"9007199254740996".length //16
9007199254740993  // 9007199254740992

备注:

1. 2的53次方,并不是按数值长度设置的,

2. 总数量级为百万亿

3. 超出会显示,但是不正常(表现为max+1=max;输入16~21之间位数的9会直接往上+1等;)所以不能用于正常计算

4.21位会显示1e+21

二、浮点型数

9007199254700.3333 //9007199254700.334
"9007199254700.334".length //17(包含小数点)

.000001 //0.000001
.0000001 //1e-7
1.0000001 //1.0000001

9.0071992547409919 //9.007199254740993

备注:

1. 并不是两边都是2的53次方而是合在一起

2. 一起共16位,超出向上取整,

3. 如果小数位数超出,不一定是截断还是向上进,如上

3. 0.000001会显示1e-7,但前面带个整数就不会了

以上仅表示一些测试现象,留做注意和参考

三 、两位小数价格的处理方式

一般处理方式都是转整以后运算,再除以100,例如:

const priceMultiply=(a,b)=>(a*b*100+.5|0)/100; //乘法
priceMultiply(18.12,10) //181.2 //后面不带0的数字
(18.12*10).toFixed(2) //181.20 //后面带0的字符串

备注:这里要注意toFixed()函数的语法:

NumberObject.toFixed(num)

所以写之前需要保证toFixed的对象是数字,否则会报错

//报错情况:
(null).toFixed(2)
(undefined).toFixed(2)
("222.333").toFixed(2)
//特殊:NaN是数字,但是无法取小数,也并不会报错
(NaN).toFixed(2)  //"NaN"

猜你喜欢

转载自www.cnblogs.com/xin-note/p/9642507.html
今日推荐