【问题标题】:Type conversion with leading zeros in Ruby [duplicate]Ruby中带有前导零的类型转换[重复]
【发布时间】:2018-09-08 00:35:55
【问题描述】:
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

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

【问题讨论】:

  • 以“0”开头的数字被认为是八进制。 en.wikipedia.org/wiki/Octal
  • 它与转换无关——00232(没有to_i)已经产生154

标签: ruby-on-rails ruby


【解决方案1】:

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

> 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

【讨论】:

  • 或者将其转换为字符串并加上基数: $> "0023".to_i(10) # 23 $> "0023.to_i(8) # 8
【解决方案2】:

如果该数字有前导零,Ruby 会将其视为八进制(以 8 为底)数字。

要获得等效的十进制数,请先将其转换为字符串,然后再将其转换为整数。

023.to_s(8).to_i
=> 23

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2023-02-22
    • 1970-01-01
    • 2017-04-01
    • 2013-03-03
    • 2021-10-22
    相关资源
    最近更新 更多