如何使用整数中的前导零
How to work with leading zeros in integers
在 Ruby 中处理前导零的正确方法是什么?
0112.to_s
=> "74"
0112.to_i
=> 74
为什么要将 0112
转换为 74
?
如何将 0112
转换为字符串 "0112"
?
我想定义一个方法,它将整数作为参数,returns它的数字按降序排列。
但是当我有前导零时,这似乎对我不起作用:
def descending_order(n)
n.to_s.reverse.to_i
end
以0
开头的数字文字是八进制表示,除了以[=13=]开头的文字表示十六进制数或0b
开头的文字表示二进制数。
1 * 8**2 + 1 * 8**1 + 2 * 8**0 == 74
要将其转换为 0112
,请使用 String#%
or Kernel#sprintf
和适当的格式字符串:
'0%o' % 0112 # 0: leading zero, %o: represent as an octal
# => "0112"
你不能,因为 Ruby 的 Integer
class 不存储前导零。
数字文字中的前导0
被解释为前缀:
0
和0o
:八进制数
0x
: 十六进制数
0b
: 二进制数
0d
: 十进制数
它允许您在这些基数中输入 数字。 Ruby 的解析器将文字转换为适当的 Integer
实例。前缀或前导零被丢弃。
另一个例子是%w
输入数组:
ary = %w(foo bar baz)
#=> ["foo", "bar", "baz"]
无法从 ary
获取 %w
。解析器将文字转换为数组实例,因此脚本永远不会看到文字。
0112
(或0o112
)被(解析器)解释为八进制数 112 并转换为整数 74
.
十进制的 0112 就是 112
,无论前面有多少个零:
0d0112 #=> 112
0d00112 #=> 112
0d000112 #=> 112
这就像浮点数的附加尾随零:
1.0 #=> 1.0
1.00 #=> 1.0
1.000 #=> 1.0
您可能必须使用字符串,即 "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
在 Ruby 中处理前导零的正确方法是什么?
0112.to_s
=> "74"
0112.to_i
=> 74
为什么要将 0112
转换为 74
?
如何将 0112
转换为字符串 "0112"
?
我想定义一个方法,它将整数作为参数,returns它的数字按降序排列。
但是当我有前导零时,这似乎对我不起作用:
def descending_order(n)
n.to_s.reverse.to_i
end
以0
开头的数字文字是八进制表示,除了以[=13=]开头的文字表示十六进制数或0b
开头的文字表示二进制数。
1 * 8**2 + 1 * 8**1 + 2 * 8**0 == 74
要将其转换为 0112
,请使用 String#%
or Kernel#sprintf
和适当的格式字符串:
'0%o' % 0112 # 0: leading zero, %o: represent as an octal
# => "0112"
你不能,因为 Ruby 的 Integer
class 不存储前导零。
数字文字中的前导0
被解释为前缀:
0
和0o
:八进制数0x
: 十六进制数0b
: 二进制数0d
: 十进制数
它允许您在这些基数中输入 数字。 Ruby 的解析器将文字转换为适当的 Integer
实例。前缀或前导零被丢弃。
另一个例子是%w
输入数组:
ary = %w(foo bar baz)
#=> ["foo", "bar", "baz"]
无法从 ary
获取 %w
。解析器将文字转换为数组实例,因此脚本永远不会看到文字。
0112
(或0o112
)被(解析器)解释为八进制数 112 并转换为整数 74
.
十进制的 0112 就是 112
,无论前面有多少个零:
0d0112 #=> 112
0d00112 #=> 112
0d000112 #=> 112
这就像浮点数的附加尾随零:
1.0 #=> 1.0
1.00 #=> 1.0
1.000 #=> 1.0
您可能必须使用字符串,即 "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