有时候我有这样的整数:
021或011
如果我尝试转换为字符串,结果将是:
p 021.to_s # "17" instead "021"
p 011.to_s # "9" instead "011"
有人可以向我解释为什么会发生这种情况,请问如何将整数转换为字符串?
答案 0 :(得分:3)
前导零的数字文字被视为八进制(以8为底)数字。 to_s方法将数字转换为默认的十进制(以10为底)。
21个八进制是17个十进制 八进制11是十进制9
为获得预期结果,请删除前导零。
答案 1 :(得分:2)
您可以引用此literals_rdoc来知道特殊的前缀,以十进制,十六进制,八进制或二进制格式写入数字。
对于十进制数字,请使用前缀0d;对于十六进制数字,请使用前缀0x;对于八进制数字,请使用前缀0或0o;对于二进制数字,请使用前缀0b。数字的字母部分不区分大小写。
21
或0d21
被视为十进制格式的数字,而021
被视为八进制格式的数字。并且在解释为打印时,它使用默认的十进制格式。
答案 2 :(得分:-3)
根据红宝石,您不能使用以0
开头的十进制整数。
如果您的电话号码前导0
或0o
,则它将被视为八进制数字。
并且您正在使用0,它将被视为八进制值。
在您的情况下,如果您以0
作为开头,则可以通过每个字符的ascii对其进行转换。