Ruby 代码删除无关紧要的小数位?

问题描述 投票:0回答:2

我想要一个优雅的代码,它删除了无关紧要的结束零,例如:

29.970 => 29.97
29.97 => 29.97
25.00 => 25
25.0 => 25

我尝试过:

argument.to_r.to_f.to_s

但并非在所有情况下都有效,例如 25.00 给出 25.0

ruby string decimal precision rational-number
2个回答
15
投票

仅当数字是字符串时尾随零才有意义:

def strip_trailing_zero(n)
  n.to_s.sub(/\.0+$/, '')
end

strip_trailing_zero(29.970) # => "29.97"
strip_trailing_zero(29.97)  # => "29.97"
strip_trailing_zero(25.00)  # => "25"
strip_trailing_zero(25.0)   # => "25"
strip_trailing_zero(250)   # => "250"

这会转换传入的浮点数并将其转换为字符串,然后使用简单的

sub
搜索和替换来修剪尾随
0
以及可选的小数点。

如果需要,您可以弄清楚如何将它们转换回整数和浮点数。如果您传递整数/固定数,这将删除重要的尾随零。如何防范这也是你要弄清楚的事情。


8
投票

尝试

sprintf('%g', value_here)

`g` ->  Convert a floating point number using exponential form
  | if the exponent is less than -4 or greater than or
  | equal to the precision, or in dd.dddd form otherwise.

https://apidock.com/ruby/Kernel/sprintf

sprintf('%g',29.970) # => "29.97"
sprintf('%g',29.97)  # => "29.97"
sprintf('%g',25.00)  # => "25"
sprintf('%g',25.0)   # => "25"
© www.soinside.com 2019 - 2024. All rights reserved.