最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于JavaScript中parseInt()的一個怪異行為解決

 更新時間:2022年12月05日 10:40:12   作者:Jimmy  
parseInt()是內(nèi)置的?JS?函數(shù),用于解析數(shù)字字符串中的整數(shù),下面這篇文章主要給大家介紹了關(guān)于JavaScript中parseInt()的一個怪異行為解決,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

parseInt() 是一個內(nèi)置的 JavaScript 函數(shù),它可以將數(shù)字字符串解析為整數(shù)。比如,我們將數(shù)字字符串 '100' 解析為整數(shù):

const number = parseInt('100');
number; // 100

如預(yù)期那樣,'100' 被解析為整數(shù) 100。

parseInt(numericalString, radix) 也接受第二個參數(shù):radix(基數(shù)),另一個參數(shù)是數(shù)字字符串 numericalString。radix 參數(shù)允許你解析來自不同數(shù)字基數(shù)的字符串為整數(shù),基數(shù)通常有 2,8, 10 和 16。

我們使用基數(shù)為 2parseInt() 來解析一個數(shù)字字符串:

const number = parseInt('100', 2);
number; // 4

parseInt('100', 2) 以基數(shù) 2 解析 '100' 為一個整數(shù):所以它返回十進制數(shù)值 4。

上面就是對 parseInt() 方法的簡單介紹。

1. parseInt() 中的一個怪異行為

parseInt(numericalString) 總是將其第一個參數(shù)轉(zhuǎn)換成字符串(如果它不是字符串的話),然后將這個字符串數(shù)字解析成整數(shù)。

這就是為什么你可以(但是不應(yīng)這么做! )使用 parseInt() 來提取浮點數(shù)的整數(shù)部分:

parseInt(0.5); // => 0
parseInt(0.05); // => 0
parseInt(0.005); // => 0
parseInt(0.0005); // => 0
parseInt(0.00005); // => 0
parseInt(0.000005); // => 0

取出浮點數(shù),比如 0.5,0.05 等等整數(shù)的部分。結(jié)果就是 0。這跟我們的預(yù)期結(jié)果一樣。

那么提取 0.0000005 整數(shù)的部分會怎樣呢?

parseInt(0.0000005); // => 5

parseInt() 將浮點數(shù) 0.0000005 解析為 5。這就很有趣且不符合預(yù)期...

為什么 parseInt(0.0000005) 會有如此怪異的行為呢?

2.解決 parseInt() 該怪異行為

我們回顧下,parseInt(numericalString) 對它的第一個參數(shù)做了什么:如果不是字符串,就將其轉(zhuǎn)換為一個字符串,然后解析,之后返回解析的整數(shù)。

這可能是第一個線索。

我們手動將浮點數(shù)轉(zhuǎn)換為字符串表現(xiàn)形式:

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'

String(0.0000005) 數(shù)值的顯式轉(zhuǎn)換和其它浮點數(shù)不同:它是指數(shù)符號exponential notation 字符串表現(xiàn)形式。

這是第二個線索 -- 很重要!

然后當指數(shù)符號字符串解析為整數(shù),你就會得到整數(shù) 5

parseInt(0.0000005); // => 5
// same as
parseInt(5e-7); // => 5
// same as
parseInt('5e-7'); // => 5

parseInt('5e-7') 考慮第一個數(shù)字 '5',跳過了 'e-7'

解密了!因為 parseInt() 總是將它第一個參數(shù)轉(zhuǎn)換為字符串,浮點數(shù)字小于 10−610^{-6}10−6 就會被寫成指數(shù)符號的形式。parseInt() 從浮點數(shù)的指數(shù)符號中取出整數(shù)。

譯者加 -- 注意,parseInt() 取字符串前面整數(shù)的部分,比如:parseInt('12Jimmy34') 則有返回結(jié)果 12

備注,安全地取出浮點數(shù)整數(shù)的部分,我推薦使用 Math.floor() 函數(shù):

Math.floor(0.5); // => 0
Math.floor(0.05); // => 0
Math.floor(0.005); // => 0
Math.floor(0.0005); // => 0
Math.floor(0.00005); // => 0
Math.floor(0.000005); // => 0
Math.floor(0.0000005); // => 0

3. 總結(jié)

parseInt() 是個將數(shù)字字符串轉(zhuǎn)換為整數(shù)的函數(shù)。

當你使用 parseInt() 獲取浮點數(shù)的整數(shù)部分的時候,要小心。

小于 10−610^{-6}10−6 的浮點數(shù)(比如 0.0000005 等同于 5∗10−75 * 10^{-7}5∗10−7)被轉(zhuǎn)換為以指數(shù)符號表示形式(比如 5e-70.0000005 指數(shù)符號形式)。這就是為什么使用 parseInt() 作用于如此小的浮點數(shù)會出現(xiàn)非預(yù)期效果:僅解析指數(shù)表示形式的重要部分(比如 5e-7 中的 5)。

挑戰(zhàn):你可以解釋為什么 parseInt(999999999999999999999) 會等于 1?

到此這篇關(guān)于JavaScript中parseInt()的一個怪異行為解決的文章就介紹到這了,更多相關(guān)js中parseInt()怪異行為內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

原文鏈接 Solving a Mystery Behavior of parseInt() in JavaScript -- 作者 Dmitri Pavlutin

相關(guān)文章

最新評論

高要市| 留坝县| 红河县| 五华县| 昌黎县| 江源县| 六安市| 东海县| 肥城市| 云龙县| 宜兰县| 清水县| 开鲁县| 崇信县| 浦北县| 呈贡县| 上犹县| 沧州市| 江川县| 通州市| 托里县| 益阳市| 手游| 达拉特旗| 宁夏| 福鼎市| 木兰县| 日土县| 龙里县| 如东县| 大渡口区| 金华市| 夹江县| 法库县| 从化市| 白水县| 洞口县| 同心县| 广东省| 榕江县| 饶阳县|