将ruby decimal设置为string而不带前导零(“。123”)

时间:2017-01-05 03:44:20

标签: 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_zero string
  string[0] = "" if string[0] == "0"
  string
end

3 个答案:

答案 0 :(得分:4)

解决方案

您可以使用:

format('%.3f', value).sub(/^0/, '')

如果它是0后跟一个点,它将删除第一个字符。

测试

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"

答案 1 :(得分:0)

您可以使用.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

答案 2 :(得分:0)

让您包含number的价值。您可以使用以下代码获取预期输出

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"