将ruby decimal格式化为不带前导零的字符串(“123”)
我想要像将ruby decimal格式化为不带前导零的字符串(“123”),ruby,Ruby,我想要像.725这样的字符串。现在,我使用%.3f,但它将前导零显示为0.725。总之,我有一个浮点数,当它有一个前导零,如0.125,当我将它转换为字符串时,我希望前导零被删除。结果:.125 谢谢 编辑: 更多示例: 0.725 -> ".725" 1.5 -> "1.500" 0.125 -> ".125" 2.456 -> "2.456" 潜在解决方案: 我取字符串中的第一个字符,如果它是零,我只将它设置为空字符 def remove_leading_
.725
这样的字符串。现在,我使用%.3f
,但它将前导零显示为0.725
。总之,我有一个浮点数,当它有一个前导零,如0.125
,当我将它转换为字符串时,我希望前导零被删除。结果:.125
谢谢
编辑:
更多示例:
0.725 -> ".725"
1.5 -> "1.500"
0.125 -> ".125"
2.456 -> "2.456"
潜在解决方案:
我取字符串中的第一个字符,如果它是零,我只将它设置为空字符
def remove_leading_zero string
string[0] = "" if string[0] == "0"
string
end
您可以使用.to_s方法转换为字符串,然后使用.sub替换进行中的0:
number = 0.725
puts number.to_s.sub(/[0.]{2}/, '.')
#=> .725
number = -0.725
puts number.to_s.sub(/[0.]{2}/, '.')
#=> -.725
允许您在
编号上包含值。您可以使用以下代码获得预期的输出
str = "#{"%.3f" % number}"
str = str[1..-1] if str[0] == '0'
上述代码将生成
0.725 -> ".725"
1.5 -> "1.500"
0.125 -> ".125"
2.4567 -> "2.456"
解决方案
您可以使用:
format('%.3f', value).sub(/^0/, '')
如果第一个字符是0后跟一个点,则删除该字符
测验
添加更多输入和所需输出的示例您是否期望类似于1.725
的值<代码>-0.725
?您希望它们如何输出?AFAIK没有删除前导零的格式。我想删除前导零。2.4567应该被截断(“2.456”)还是四舍五入(“2.457”)?@okysabeni是否也要删除负数的前导零?例如,如果将-0.725
转换为“-.725”
?不适用于100
或10.0
,但我认为您可以通过使用/\b0\/
或仅使用子(/^0/,'')
,使用%.3f
,前导零后面总是跟一个点来解决这个问题。真,我试图避免将“0”替换为空字符串,但在%.3f
中无法实现。
values = [
0.725,
1.5,
0.125,
2.4567,
0,
10
]
values.each do |value|
p format('%.3f', value).sub(/^0/, '')
end
#=>
# ".725"
# "1.500"
# ".125"
# "2.457"
# ".000"
# "10.000"