Ruby 删除无关紧要的小数位的代码?
Ruby code to remove insignificant decimal places?
我想得到一个优雅的代码,它删除了无关紧要的结束零,例如:
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
仅当数字是字符串时尾随零才有意义:
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"
这会转换传入的浮点数并将它们转换为字符串,然后使用简单的 sub
搜索并替换为 trim 尾随 0
和可选的小数点。
如有必要,您可以了解如何将它们转换回整数和浮点数。如果您传递 integer/fixnum,这将删除重要的尾随零。如何防范也是你要思考的问题。
尝试 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"
我想得到一个优雅的代码,它删除了无关紧要的结束零,例如:
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
仅当数字是字符串时尾随零才有意义:
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"
这会转换传入的浮点数并将它们转换为字符串,然后使用简单的 sub
搜索并替换为 trim 尾随 0
和可选的小数点。
如有必要,您可以了解如何将它们转换回整数和浮点数。如果您传递 integer/fixnum,这将删除重要的尾随零。如何防范也是你要思考的问题。
尝试 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"