我在ruby控制台中获得了以下输出。
Integer('009') # => ArgumentError: invalid value for Integer(): "009"
但是如果我尝试将相同的字符串转换为Float
,它就可以了。
Float('009') # => 9.0
为什么Float
转换此内容而Integer
没有?
答案 0 :(得分:10)
unmanaged extension将以前导0
开头的参数解释为八进制。由于Kernel#Integer ony使用数字0-7
,因此未定义包含9
的数字。来自文档:
另一方面,如果arg是一个String,当省略base或等于零时,将遵循基数指示符(0,0b和0x)。
octal number system不会这样做。
要使用"009"
将Integer
转换为基数为10的整数,您需要传递一个指定基数的可选参数:
Integer("009", 10)
答案 1 :(得分:5)
根据docs
将参数转换为整数值。如果参数是字符串, 并碰巧以0x,0b,0开头,将其解释为十六进制,二进制, 八进制字符串。
由于009
被解释为八进制,因此您收到错误。
或者您也可以这样做:
'009'.to_i
#=> 9