在Ruby中使用前导零进行类型转换

时间:2018-03-29 06:37:51

标签: ruby-on-rails ruby

1.9.3-p551 :016 > 00232.to_i
=> 154 
1.9.3-p551 :017 > 0023.to_i
=> 19 
1.9.3-p551 :024 > 23.to_i
=> 23

将带前导零的数字转换为整数类型会产生不良结果。无法弄清楚原因?请指教

2 个答案:

答案 0 :(得分:3)

删除初始零,因为它是八进制数中的代表性目的。

> 00232.to_i
=> 154     # (2 * (8**0)) + (3 * (8**1)) + (2 * (8**2)) + (0 * (8**3))
           # 2 + 24 + 128
           # => 154

与其他人相似。

> 0023.to_i
=> 19      # (3 * (8**0)) + (2 * (8**1)) + (0 * (8**2))
           # 3 + 16 + 0
           # => 19

答案 1 :(得分:0)

Ruby将数字视为八进制(基数为8),如果它具有前导零。

要获得等效的十进制数,请在将其转换为整数之前将其转换为字符串。

023.to_s(8).to_i
=> 23