我在ruby控制台中得到了以下输出.
Integer('009') # => ArgumentError: invalid value for Integer(): "009"
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试将相同的字符串转换为Float,它可以工作.
Float('009') # => 9.0
Run Code Online (Sandbox Code Playgroud)
为什么Float转换这个而Integer不是?
Dre*_*nmi 10
Kernel#Integer解释以前导0为八进制的参数.由于八进制数系统 ony使用数字0-7,9因此未定义包含a的数字.从文档:
如果arg是一个String,当省略base或等于零时,将遵循基数指示符(0,0b和0x).
另一方面,内核#Float不会以这种方式运行.
要"009"使用基数10 转换为整数Integer,需要传递一个指定基数的可选参数:
Integer("009", 10)
Run Code Online (Sandbox Code Playgroud)
按照文档
将参数转换为整数值.如果参数是字符串,并且碰巧以0x,0b,0开头,则分别将其解释为十六进制,二进制,八进制字符串.
由于009被解释为八进制,您将收到错误.
或者您也可以这样做:
'009'.to_i
#=> 9
Run Code Online (Sandbox Code Playgroud)