为什么当我尝试将特定的整数转换为字符串时,结果是另一个值

时间:2019-05-30 02:45:42

标签: ruby

有时候我有这样的整数:

021或011

如果我尝试转换为字符串,结果将是:

p 021.to_s # "17" instead "021"
p 011.to_s # "9" instead "011"

有人可以向我解释为什么会发生这种情况,请问如何将整数转换为字符串?

3 个答案:

答案 0 :(得分:3)

前导零的数字文字被视为八进制(以8为底)数字。 to_s方法将数字转换为默认的十进制(以10为底)。

21个八进制是17个十进制 八进制11是十进制9

为获得预期结果,请删除前导零。

答案 1 :(得分:2)

您可以引用此literals_rdoc来知道特殊的前缀,以十进制,十六进制,八进制或二进制格式写入数字。

  

对于十进制数字,请使用前缀0d;对于十六进制数字,请使用前缀0x;对于八进制数字,请使用前缀0或0o;对于二进制数字,请使用前缀0b。数字的字母部分不区分大小写。

210d21被视为十进制格式的数字,而021被视为八进制格式的数字。并且在解释为打印时,它使用默认的十进制格式。

答案 2 :(得分:-3)

根据红宝石,您不能使用以0开头的十进制整数。 如果您的电话号码前导00o,则它将被视为八进制数字。 并且您正在使用0,它将被视为八进制值。

在您的情况下,如果您以0作为开头,则可以通过每个字符的ascii对其进行转换。