2017-10-17 130 views
-3

时,如果我通过1递增整数003保留0的,我得到4递增的数字

num = 003 
num += 1 
# => 4 

我希望它是004。我怎样才能保留此0的?

+0

不清楚你的意思。 – sawa

+0

嗯。有趣。也许这是因为我认为这是超级简单的,所以在这里迟到了? @sawa感谢 – Bitwise

+0

@Bitwise目前还不清楚,因为整数没有前导零,即不存在整数'003'并没有整数'004'。字面'003'相当于'03'这意味着_octal_数'3'。这可能不是你想要的。 – Stefan

回答

2

您可以将整数转换成字符串,并使用String#rjust,其中第一个参数是结果的总宽度给它填充固定量字符串,第二个参数是用于填充字符:

>> int = 3 
>> str = int.to_s.rjust(3, '0') 
#=> "003" 

然后你就可以使用String#next增加该字符串:

>> str.next 
#=> "004" 
+0

这个答案是错的。 “你不能有一个值为003的整数”与'int = 003相矛盾; int#=> 3'。你**可以拥有这样的整数。此外,只是声明“[你]失去了这些前导零,而变量只保留了整数值”是错误的。它不是简单地切断前导零。这不是它的工作方式。 '009'并不意味着'9'。看到亩太短的答案。 – sawa

+0

@sawa已更新的答案。 – moveson

3

首先,在003前导零使得在Ruby中的八进制整数文字,而不是一个小数。当然,它不会与3重要,但它确实为009事情(这是一个SyntaxError),030等想必你真正的意思是说:

num = 3 

为主导的零都算不上部分的数字,他们只是格式化你想要的输出。要格式化数字,你会使用String#%sprintf

> '%03d' % 3 
=> "003" 

> sprintf('%03d', 3) 
=> "003"