【问题标题】:ParseInt() strange octal behavior [duplicate]ParseInt() 奇怪的八进制行为
【发布时间】:2018-12-22 19:31:49
【问题描述】:

我必须将一些输入数据转换为整数。 我找到了parseInt() 函数。
如果输入是字符串,一切都很好:

console.log(parseInt("123")) //123

即使字符串以0开头:

console.log(parseInt("0123")) //123

但是如果一个数字以0开头,就会给出83!

    console.log(parseInt(0123)) //83 instead of 123

我听说那是因为八进制行为 (Javascript parseInt() with leading zeros),所以我给它一个 radix 参数:

    console.log(parseInt(0123,10)) //83!!!

还是83!!!

然后,最奇怪的是:
我想:八进制 123 必须给出八进制的 123! 但它给了NaN

console.log(parseInt(0123, 8)) //NaN

为什么会有这种奇怪的行为?!我该如何解决?

谢谢!!!

【问题讨论】:

  • 行为与parseInt() 无关。试试console.log(0123)
  • parseInt 需要一个字符串。 “我该如何解决?”的答案是将正确的参数传递给函数。

标签: javascript parseint


【解决方案1】:

在这段代码中,您可以定义一个八进制格式的数字(而不是字符串),然后将其传递给parseInt。然后parseInt 将该数字转换为字符串 ("83"),并再次对其进行解析。

如果您将字符串传递给parseInt,您将得到预期的结果:

console.log(parseInt('0123'))

【讨论】:

    【解决方案2】:

    您应该使用字符串和基数的组合来获得正确的值。这是一个例子:

    parseInt(01234) // returns 668
    parseInt('01234', 10) // returns 1234
    

    【讨论】:

    • 这里没有现有答案中尚未解决的信息。
    • 我的回答建议使用基数和字符串。
    • 但问题的重要部分是“为什么”。 OP 已经证明他们已经知道正确的方法。您正在向他们重复他们已经展示的内容。这并不能解释为什么八进制文字的处理方式不同。
    猜你喜欢
    • 2017-04-04
    • 2010-10-25
    • 1970-01-01
    • 2016-12-07
    • 2020-09-12
    • 2013-08-02
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多