我有一个Rails应用程序,处理来自不同国家的产品价格。 储存英镑和美元工作正常。但是,当我开始处理具有3个小数位的CLP(智利比索)时,它的存储权就不正确。
例如,我尝试插入799.990,但是当它以799.99的形式存储时。这不理想,因为价格可能为799.99。
我将价格设置为0.10001
,因此这应该可以涵盖大多数货币。
那么,我的问题是,有什么办法可以存储价格尾随0的价格?还是我想念一些东西,有没有更好的方法来处理Rails中的货币?
更新: 在对StackOverflow进行了更多搜索之后,我认为这可能是一种处理货币的简便方法。
答案 0 :(得分:1)
因为金额方面799.99与799.990相同,所以您不需要,只需修改数据库列即可存储结尾的“ 0”。您只需编辑视图即可在小数点后显示3位数字:
<% if @product.currency == 'CLP' %>
Price: <%= '%.3f' % @product.price %>
<% else %>
<!-- Existing logic -->
<% end %>
更新
另一种选择是使用sprintf
:
<%= sprintf('%.3f', @product.price) %>
答案 1 :(得分:0)
正如Jagdeep在他的回答中所写,您只需要在将数字呈现到页面上时格式化数字即可。
我将为此使用Rails的number_to_currency
助手:
CURRENCY_OPTIONS = {
'CLP' => { unit: '$', precision: 3 },
'EUR' => { unit: '€', precision: 2 },
'USD' => { unit: '$', precision: 2 }
}
number_to_currency(price, CURRENCY_OPTIONS[currency])