最近開發項目時遇到一個奇怪的問題,parseInt(0.0000005) === 5。正常情況下輸出0是正確的,為什么是5呢?我們一起來探討一下這個問題。
首先,你通常什么時候使用parseInt?大多數時候,我們使用它來解析字符串并返回其整數部分。帶著這個問題,我們來看看parseInt方法。
根據 MDN 文檔,“parseInt(string, radix) 函數解析字符串參數并返回指定基數(數學數字系統中的基數)的整數。”
語法
parseInt(string)parseInt(string, radix)
例如:
parseInt('0.5') // 0parseInt('0.5') // 0parseInt('0.05') // 0parseInt('0.005') // 0parseInt('0.0005') // 0parseInt('0.00005') // 0parseInt('0.000005') // 0parseInt('015') // 15parseInt('015', 8) // 13parseInt('15px', 10) // 15
當parseInt的第一個參數是數字時,它如何解析?
parseInt(0.0000005) === 5 的真相也在這里......
讓我們使用 String 函數檢查基于字符串的值,看看每個值的輸出是什么:
String(0.5); // => '0.5'String(0.05); // => '0.05'String(0.005); // => '0.005'String(0.0005); // => '0.0005' String(0.00005); // => '0.00005'String(0.000005); // => '0.000005'String(0.0000005); // => '5e-7' pay attention here
正如用戶 SeyyedKhandon 在他的 Stack Overflow 回答中解釋的那樣:
“當我們使用 parseInt(0.0000005) 時,它等于 parseInt('5e-7') 并且基于定義:
parseInt 只能將字符串的前導部分解釋為整數值;它忽略任何不能解釋為整數表示法一部分的代碼單元,并且沒有給出任何此類代碼單元被忽略的指示。
parseInt(0.0000005)
parseInt('5e-7') // 5
最后,答案將僅返回 5,因為它是直到非字符 e 為止唯一一個數字字符,因此其余的 e-7 將被丟棄。”
建議使用以下 Math.floor() 函數:
Math.floor(0.5); // => 0Math.floor(0.05); // => 0Math.floor(0.005); // => 0Math.floor(0.0005); // => 0Math.floor(0.00005); // => 0Math.floor(0.000005); // => 0Math.floor(0.0000005); // => 0
現在,你能解釋一下為什么 parseInt(99999999999999999999999999) 等于 1 嗎?
本文鏈接:http://www.tebozhan.com/showinfo-26-11864-0.html為什么 JavaScript 的 parseInt(0.0000005) 打印“5”?
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 十道Java限流器面試題和答案
下一篇: 關于架構“重構”的要點