将float格式化为最小小数位数

时间:2011-05-11 18:00:06

标签: ruby-on-rails ruby

我在rails中存储小数,我需要将其显示为货币:

11.1230 => "$11.123"
11.1000 => "$11.10"
11.0100 => "$11.01"
11.1234 => "$11.1234"

这么简单吗?

4 个答案:

答案 0 :(得分:5)

编辑:看起来这是特定于Rails 3的,因为Rails 2的number_with_precision方法不包含strip_insignificant_zeros选项:

您可以将一些选项传递给number_to_currency(标准的Rails助手):

number_to_currency(11.1230, :precision => 10, :strip_insignificant_zeros => true)
# => "$11.123"

您需要提供精度以使strip_insignificant_zeros选项起作用,否则永远不会调用基础number_with_precision方法。

答案 1 :(得分:5)

def pad_number( number, min_decimals=2 )
  s = "%g" % number
  decimals = (s[/\.(\d+)/,1] || "").length
  s << "." if decimals == 0
  s << "0"*[0,min_decimals-decimals].max
end
puts [ 11.123, 11.1, 11.01, 11.1234, 11 ].map{ |n| pad_number(n) }
#=> 11.123
#=> 11.10
#=> 11.01
#=> 11.1234
#=> 11.00

答案 2 :(得分:4)

如果要存储为浮点数,可以在自己的视图中使用number_to_currency(value)方法打印看起来像$的内容。

如果我错了(因为我很少处理货币),请纠正我,但我认为传统观点是将美元价值存储为整数。这样你就不必处理时髦的浮动数学。

答案 3 :(得分:-1)

因此,将其转换为三位小数位数,然后当且仅当它为零时才删除最后一位数。

s.sub(/0$/, '')