原文链接 Solving a Mystery Behavior of parseInt() in JavaScript -- 创作者 Dmitri Pavlutin
parseInt()
是一个内置的 JavaScript
函数公式,它能将数据字符串数组分析为整数金额。例如,我们将要数据字符串数组 '100'
分析为整数金额:
const number = parseInt('100');
number; // 100
如期望那般,'100'
被解读为整数金额 100
。
parseInt(numericalString, radix)
也接纳第二个主要参数:radix
(数量),另一个主要参数是数据字符串数组 numericalString
。radix
主要参数允许分析来自各式各样数据数量的字符串数组为整数金额,数量一般有 2,8, 10 和 16
。
我们使用数量为 2
的 parseInt()
来分析一个数字字符串数组:
const number = parseInt('100', 2);
number; // 4
parseInt('100', 2)
以数量 2
分析 '100'
为一个整数:因此它回到十进制标值 4
。
1. parseInt() 中的一个古怪个人行为
parseInt(numericalString)
一直把它第一个主要参数转换成字符串(它可能并不是字符串数组得话),再将这一字符串数组数字解析成整数金额。
这也是为什么你能(但不应这样做! )应用 parseInt()
来获取浮点型的整数部分:
parseInt(0.5); // => 0
parseInt(0.05); // => 0
parseInt(0.005); // => 0
parseInt(0.0005); // => 0
parseInt(0.00005); // => 0
parseInt(0.000005); // => 0
取下浮点型,例如 0.5
,0.05
这些整数金额的那一部分。结果可想而知 0
。这和我们的预期成果一样。
那样获取 0.0000005
整数金额的那一部分会怎么样呢?
parseInt(0.0000005); // => 5
parseInt()
将浮点型 0.0000005
分析为 5
。这便非常有趣并且不超出预期...
为何 parseInt(0.0000005)
会出现这般诡异的个人行为呢?
2.处理 parseInt() 该古怪个人行为
咱们回望下,parseInt(numericalString)
对它第一个主要参数干了什么:要不是字符串数组,就把其转换成一个字符串数组,随后分析,以后回到分析的整数金额。
这应该是第一个案件线索。
大家手动式将浮点型转换为字符串表达形式:
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)
标值的显式变换和其他浮点型不一样:这是指数值标记exponential notation 字符串数组表达形式。
这个是第二个案件线索 -- 至关重要!
随后当指数值标记字符串数组分析为整数金额,你就能得到整数金额 5
:
parseInt(0.0000005); // => 5
// same as
parseInt(5e-7); // => 5
// same as
parseInt('5e-7'); // => 5
parseInt('5e-7')
考虑到第一个数据 '5'
,跳过了 'e-7'
。
破译了!由于 parseInt()
一直把它第一个主要参数转换为字符串,浮点数数据低于 便会被写出指数值符号方式。parseInt()
从浮点型的指数值标记中取出整数金额。
译员加 -- 留意,
parseInt()
取字符串数组前边整数金额的那一部分,例如:parseInt('12Jimmy34')
亦有返回结果12
备注名称,快速地取下浮点型整数金额的那一部分,我建议使用 Math.floor()
函数公式:
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. 汇总
parseInt()
是一个将数据字符串转换为整数金额的函数公式。
如果你应用 parseInt()
获得浮点型的整数部分时,要谨慎。
低于 的浮点型(例如 0.0000005
相当于 )被变换以指数值矩阵表示方式(例如 5e-7
是 0.0000005
指数值标记方式)。这也是为什么应用 parseInt()
应用于这般小一点浮点型会有非预期目标:仅分析指数值表明方式的重要部分(例如 5e-7
里的 5
)。
考验:你能解释为什么 parseInt(999999999999999999999)
会相当于 1
? 还可以在下面评论区写下你的思维。
文中已经参与「 . 」
声明:本文仅供个人学习使用,来源于互联网,本文有改动,本文遵循[BY-NC-SA]协议, 如有侵犯您的权益,请联系本站,本站将在第一时间删除。谢谢你