我在ruby控制台中得到了以下输出。为什么`Integer('009')'不起作用,但是'Float('009')'呢?
Integer('009') # => ArgumentError: invalid value for Integer(): "009"
但是,如果我尝试将相同的字符串转换为Float
,它的工作原理。
Float('009') # => 9.0
为什么Float
转换这一点的同时Integer
不?
我在ruby控制台中得到了以下输出。为什么`Integer('009')'不起作用,但是'Float('009')'呢?
Integer('009') # => ArgumentError: invalid value for Integer(): "009"
但是,如果我尝试将相同的字符串转换为Float
,它的工作原理。
Float('009') # => 9.0
为什么Float
转换这一点的同时Integer
不?
Kernel#Integer解释开始领先0
为八进制参数。由于octal number system使用数字0-7
,包含9
的号码未定义。从文档:
如果参数arg是一个字符串,当碱基被忽略或等于零时,基数指示符(0,0b和0x)被兑现。
Kernel#Float另一方面,并不表现如此。
要使用Integer
"009"
转换为整数以10为基数,你需要通过一个可选的参数指定基地:
Integer("009", 10)
作为每docs
参数设置为整数值转换。如果参数是字符串, 并恰好以0x,0b,0开头,则分别将其解释为十六进制,二进制, 八进制字符串。
由于009
被解释为八进制,因此出现错误。
或者你也可以这样做:
'009'.to_i
#=> 9
的可能的复制[如何在整数前导零工作( http://stackoverflow.com/questions/28545559/how-to-work-with-leading-zeros-in-integers) –
这个答案处理整数解析在各种基地(在这种情况下,八进制)。浮动总是在基本10中表示,因此不会出现这种行为。 –