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"