【问题标题】:Strange and inconsistent behaviour of parseInt on decimal fractions [duplicate]parseInt 在小数上的奇怪和不一致的行为[重复]
【发布时间】:2017-11-22 05:02:52
【问题描述】:

console.log(parseInt(0.0000008))
// > 8

console.log(parseInt(0.000008))
// > 0

console.log(parseInt(0.0000008, 10))
// > 8

console.log(parseInt(0.000008, 10))
// > 0

上述代码在 macOS Sierra 版本 10.12.6 上的 Google Chrome 版本 62.0.3202.94(官方构建)(64 位) 中运行。

如您所见,行为不取决于您是否指定基数。

注意:我通常使用~~而不是parseInt,这样看起来更安全。

为什么我会得到这些结果?

【问题讨论】:

  • 你在这里用带有这些参数的 parseInt 做什么。
  • 唯一奇怪的是你在一个数字上调用parseInt,而它显然需要一个字符串。你的意思是使用Math.floor
  • @guys,请参阅我在下面已经接受的答案中发表的评论,请不要一直问我用例以及为什么我这样调用函数???
  • 使用~~Math.floor,而不是parseInt。它根本不是工作的正确工具(将数字转换为 int)

标签: javascript v8


【解决方案1】:

parseInt 如果参数还不是字符串,则将其第一个参数字符串化。 0.000008 字符串化为'0.000008',但0.0000008 字符串化为'8e-7'

如果parseInt 在输入中发现无效字符,它会忽略该字符及其后面的所有内容。 .e 对基数 10 无效(. 对任何基数都无效),所以 parseInt'0.000008' 视为 '0''8e-7' 视为 '8'

我不知道你想在这里做什么,但parseInt 不是这样做的工具。

【讨论】:

猜你喜欢
  • 2020-09-12
  • 1970-01-01
  • 2023-01-14
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多