使用Rails在Postgres中存储多种货币

时间:2018-08-01 13:17:20

标签: ruby-on-rails postgresql currency

我有一个Rails应用程序,处理来自不同国家的产品价格。 储存英镑和美元工作正常。但是,当我开始处理具有3个小数位的CLP(智利比索)时,它的存储权就不正确。

例如,我尝试插入799.990,但是当它以799.99的形式存储时。这不理想,因为价格可能为799.99。

我将价格设置为0.10001,因此这应该可以涵盖大多数货币。

那么,我的问题是,有什么办法可以存储价格尾随0的价格?还是我想念一些东西,有没有更好的方法来处理Rails中的货币?


更新: 在对StackOverflow进行了更多搜索之后,我认为这可能是一种处理货币的简便方法。

number_to_currency locale converting

2 个答案:

答案 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])