Number.isSafeInteger()
åºçº¿
广æ³å¯ç¨
èª 2015å¹´9æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
Number.isSafeInteger() éææ¹æ³å¤ææä¾ç弿¯å¦æ¯ä¸ä¸ªå®å
¨æ´æ°ã
å°è¯ä¸ä¸
function warn(x) {
if (Number.isSafeInteger(x)) {
return "Precision safe.";
}
return "Precision may be lost!";
}
console.log(warn(Math.pow(2, 53)));
// Expected output: "Precision may be lost!"
console.log(warn(Math.pow(2, 53) - 1));
// Expected output: "Precision safe."
è¯æ³
Number.isSafeInteger(testValue)
åæ°
testValue-
è¦æµè¯æ¯å¦ä¸ºå®å ¨æ´æ°çå¼ã
è¿åå¼
妿ç»å®ç弿¯ä¸ä¸ªå®å
¨æ´æ°ï¼åè¿åå¸å°å¼ trueãå¦åè¿å falseã
æè¿°
å®å ¨æ´æ°ç± -(253 - 1) å° 253 - 1 çæææ´æ°ç»æï¼å å«ï¼Â±9,007,199,254,740,991ï¼ãå®å ¨æ´æ°æ¯ç¬¦å以䏿¡ä»¶çæ´æ°ï¼
- å¯ä»¥ç²¾ç¡®å°è¡¨ç¤ºä¸º IEEE-754 å精度æ°ï¼å¹¶ä¸
- å ¶ IEEE-754 表示形å¼ä¸è½æ¯èå ¥ä»»ä½å ¶ä»æ´æ°ä»¥éåº IEEE-754 表示形å¼çç»æã
ä¾å¦ï¼253 - 1 æ¯ä¸ä¸ªå®å ¨æ´æ°ï¼å®å¯ä»¥ç²¾ç¡®å°è¡¨ç¤ºï¼å¹¶ä¸å¨ä»»ä½ IEEE-754 èå ¥æ¨¡å¼ä¸é½æ²¡æå ¶ä»æ´æ°èå ¥ç»æä¸ºè¯¥æ´æ°ãç¸æ¯ä¹ä¸ï¼253 䏿¯ä¸ä¸ªå®å ¨æ´æ°ï¼å®å¯ä»¥å¨ IEEE-754 ä¸ç²¾ç¡®å°è¡¨ç¤ºï¼ä½æ´æ° 253 + 1 ä¸è½ç´æ¥å¨ IEEE-754 ä¸è¡¨ç¤ºï¼èæ¯éç¨å°±è¿èå ¥ååé¶èå ¥æ¶ï¼ä¼èå ¥å° 253ã
å¤ç大约 9 åä¸äº¿å·¦å³ç弿¶ï¼éè¦ä½¿ç¨ä»»æç²¾åº¦ç®æ¯åºæ¥å®ç°å®å ¨ç²¾ç¡®æ§ãæå ³æµ®ç¹æ°è¡¨ç¤ºçæ´å¤ä¿¡æ¯ï¼è¯·åé ç¨åºåéè¦äºè§£çæµ®ç¹æ°ç®æ¯ç¥è¯ã
å¯¹äºæ´å¤§çæ´æ°ï¼è¯·èèä½¿ç¨ BigInt ç±»åã
示ä¾
>ä½¿ç¨ isSafeInteger()
Number.isSafeInteger(3); // true
Number.isSafeInteger(2 ** 53); // false
Number.isSafeInteger(2 ** 53 - 1); // true
Number.isSafeInteger(NaN); // false
Number.isSafeInteger(Infinity); // false
Number.isSafeInteger("3"); // false
Number.isSafeInteger(3.1); // false
Number.isSafeInteger(3.0); // true
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-number.issafeinteger> |