我正在开发一个非常基本的购物车系统。
我有一个表items,它的列价格类型为整型。
我在视图中显示包含欧元和美分的价格时遇到了麻烦。在Rails框架中处理货币时,我是否遗漏了一些明显的东西?
我正在开发一个非常基本的购物车系统。
我有一个表items,它的列价格类型为整型。
我在视图中显示包含欧元和美分的价格时遇到了麻烦。在Rails框架中处理货币时,我是否遗漏了一些明显的东西?
当前回答
您可能希望在数据库中使用DECIMAL类型。在迁移过程中,执行如下操作:
# precision is the total number of digits
# scale is the number of digits to the right of the decimal point
add_column :items, :price, :decimal, :precision => 8, :scale => 2
在Rails中,:decimal类型返回为BigDecimal,这对于价格计算非常有用。
如果您坚持使用整数,那么您将不得不在所有地方手动转换为bigdecimal,这可能会成为一个麻烦。
正如mcl所指出的,要打印价格,请使用:
number_to_currency(price, :unit => "€")
#=> €1,234.01
其他回答
Ruby和Rails的简单代码
<%= number_to_currency(1234567890.50) %>
OUT PUT => $1,234,567,890.50
如果有人正在使用Sequel,那么迁移将会是这样的:
add_column :products, :price, "decimal(8,2)"
Sequel忽略了:precision和:scale
续作版本:续作(3.39.0,3.38.0)
我是这样用的:
number_to_currency(amount, unit: '€', precision: 2, format: "%u %n")
当然,货币的符号、精度、格式等都取决于每种货币。
你可以将一些选项传递给number_to_currency(一个标准的Rails 4视图帮助器):
number_to_currency(12.0, :precision => 2)
# => "$12.00"
由Dylan Markow发布
绝对的整数。
即使BigDecimal技术上存在,1.5仍然会在Ruby中给你一个纯浮点数。