将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$/, '')
- 如何要求rubygems帮助找到rubygem文件?
- Mac OS X Lion – mysql:找不到命令
- 如何在EventMachine实现中捕获exception?
- 查找包含特定文本的表
- 我可以操作yaml文件并再次写出来
- 如何用Ruby的法拉第指定网络接口?
- 如何在使用RVM时为Ruby on Rails安装SQlite3
- Heroku Rails Net :: HTTP:OpenSSL :: SSL :: SSLError:SSL_connect返回= 1 errno = 0状态= SSLv3读取服务器证书B:证书validation失败
- 将ruby与html混合时,“<%=”和“<%”之间的区别?