前缀为"0"的数字文字

2 ruby number-literal

使用insert,我将值推送到Array:

myarray=[22,33,44]
myarray.insert(0,02)
# => [2,22,33,44]
Run Code Online (Sandbox Code Playgroud)

如果做到以下,我得到:

myarray.insert(0,020)
# => [16,2,22,33,44]
Run Code Online (Sandbox Code Playgroud)

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

myarray.insert(0,0200)
# => [128,16,2,22,33,44]
Run Code Online (Sandbox Code Playgroud)

0200变成128?我可以知道这个的原因吗?

Bea*_*epp 8

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

您也可以使用二进制/十六进制执行类似操作

0x20 => 32 (hexadecimal)
020 => 16 (octal)
0b10 => 2 (binary)
080 => Invalid octal digit
Run Code Online (Sandbox Code Playgroud)

  • 我可以看出为什么它可能会有点违反直觉,但是八进制语法可以很容易地使用八进制数.这不应该是一个问题,因为"020".to_i会给你20.所以你可以定义它的唯一地方是你的源代码,你不应该在你的数字前面有多余的0 :) (3认同)