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+21web
安全值判断(ES6)Number.isSafeInteger(num):安全
Number.isSafeInteger(9007199254740993) // false (存在一个边界问题) Number.isSafeInteger(990) // true Number.isSafeInteger(9007199254740993 - 990) // true 9007199254740993 - 990 // 返回结果 9007199254740002 // 正确答案应该是 9007199254740003
9007199254700.3333 //9007199254700.334 "9007199254700.334".length //17(包含小数点) .000001 //0.000001 .0000001 //1e-7 1.0000001 //1.0000001 9.0071992547409919 //9.007199254740993
备注:ide
1. 并非两边都是2的53次方而是合在一块儿
2. 一块儿共16位,超出向上取整,
3. 若是小数位数超出,不必定是截断仍是向上进,如上
3. 0.000001会显示1e-7,但前面带个整数就不会了函数
以上仅表示一些测试现象,留作注意和参考工具
JS里面尽管可以正确表示的数值量在2^53,可是位运算可以正常运算的范围却依然是32位,第一位为符号位,因此是2^31,转成10位的边界值是(2147483648)。学习
~~2147483647 2147483647 ~~2147483648 -2147483648 ~~2147483649 -2147483647 ~~2147483650 -2147483646
备注:测试
1. JS的位移运算符有:(|,&,<<,>>,~,^) ,要特别注意使用时候的位数限制职业规划
2. 如上的按位取反运算能够看出,超出部分会变成负数日后减code
通常处理方式都是转整之后运算,再除以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的字符串 web前端开发学习Q-q-u-n:⑦⑧④-⑦⑧③-零①② ,分享学习的方法和须要注意的小细节,不停更新最新的教程和学习方法 (从零基础开始到前端项目实战教程,学习工具,职业规划)
备注:这里要注意toFixed()函数的语法:
NumberObject.toFixed(num)
因此写以前须要保证toFixed的对象是数字,不然会报错
//报错状况: (null).toFixed(2) (undefined).toFixed(2) ("222.333").toFixed(2) //特殊:NaN是数字,可是没法取小数,也并不会报错 (NaN).toFixed(2) //"NaN"