Joe*_*oel 7 ruby string integer octal
在Ruby中处理前导零的正确方法是什么?
0112.to_s
=> "74"
0112.to_i
=> 74
Run Code Online (Sandbox Code Playgroud)
为什么要转换0112成74?
如何转换0112为字符串"0112"?
我想定义一个方法,该方法将整数作为参数,并以其降序返回数字.
但是当我有前导零时,这对我来说似乎不起作用:
def descending_order(n)
n.to_s.reverse.to_i
end
Run Code Online (Sandbox Code Playgroud)
fal*_*tru 10
以字母开头的数字文字0是八进制表示形式,但以0x表示十六进制数字或0b表示二进制数字开头的文字除外.
1 * 8**2 + 1 * 8**1 + 2 * 8**0 == 74
Run Code Online (Sandbox Code Playgroud)
要将其转换为0112,使用String#%或Kernel#sprintf使用适当的格式字符串:
'0%o' % 0112 # 0: leading zero, %o: represent as an octal
# => "0112"
Run Code Online (Sandbox Code Playgroud)
你不能,因为 Ruby 的Integer类不存储前导零。
领先0的数字面解释为一个前缀:
0和0o:八进制数0x: 十六进制数0b: 二进制数0d: 十进制数它允许您在这些基数中输入数字。Ruby 的解析器将文字转换为适当的Integer实例。前缀或前导零被丢弃。
另一个例子是%w输入数组:
ary = %w(foo bar baz)
#=> ["foo", "bar", "baz"]
Run Code Online (Sandbox Code Playgroud)
没有办法%w从ary. 解析器将文字转换为数组实例,因此脚本永远不会看到文字。
0112(或0o112) 被(由解析器)解释为八进制数 112 并转换为整数74。
十进制 0112 就是112,无论您在前面放多少个零:
0d0112 #=> 112
0d00112 #=> 112
0d000112 #=> 112
Run Code Online (Sandbox Code Playgroud)
这就像浮点数的附加尾随零:
1.0 #=> 1.0
1.00 #=> 1.0
1.000 #=> 1.0
Run Code Online (Sandbox Code Playgroud)
您可能必须使用字符串,即 "0112"
另一种选择是明确提供(最小)宽度,例如:
def descending_order(number, width = 0)
sprintf('%0*d', width, number).reverse.to_i
end
descending_order(123, 4)
#=> 3210
descending_order(123, 10)
#=> 3210000000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4430 次 |
| 最近记录: |