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

我在rails中存储了一个小数,我需要将它显示为货币,如下所示:

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

有什么简单的方法吗?

 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 

编辑:看起来这是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方法。

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

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

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

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