【问题标题】:Numeric literals prepended with `0` [duplicate]以 `0` 开头的数字文字 [重复]
【发布时间】:2012-12-06 12:51:15
【问题描述】:

使用insert,我将值推送到Array

myarray=[22,33,44]
myarray.insert(0,02)
# => [2,22,33,44]

如果执行以下操作,我会得到:

myarray.insert(0,020)
# => [16,2,22,33,44]

020 变成 16?如果我执行以下操作,我会得到:

myarray.insert(0,0200)
# => [128,16,2,22,33,44]

0200 变成 128?我可以知道这是什么原因吗?

【问题讨论】:

    标签: ruby number-literal


    【解决方案1】:

    如果数字前面有零,ruby 将其视为八进制数(以 8 为底)

    你也可以用二进制/十六进制做类似的事情

    0x20 => 32 (hexadecimal)
    020 => 16 (octal)
    0b10 => 2 (binary)
    080 => Invalid octal digit
    

    【讨论】:

    • 我对 Ruby 不了解。太糟糕了! 020 应该是 20。我进一步阅读,显然这是跨语言的标准。
    • 我明白为什么它可能有点违反直觉,但是八进制语法使使用八进制数变得容易。这也不应该是一个真正的问题,因为“020”.to_i 会给你 20。所以你可以定义它的唯一地方是在你的源代码中,无论如何你不应该在你的数字前面有多余的 0 :)
    • 我看到了好处。我认为这不值得。
    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多