如何将整数转换为货币并显示正确的美分
How to convert an integer to currency and display the correct cents
如果 @service.amount
等于 28.95 美元:
<p><%= number_to_currency(@service.amount) %></p>
输出的是$2895.00,不是我上面写的。查找后没有找到解决方法。
@service.amount
是一个整数,因为 Stripe 只接受整数。
number_to_currency
不希望获得美分金额。它认为它是美元。您需要做的是将以美分为单位的金额转换为美元,然后将其发送到 number_to_currency
方法。
我不知道什么是对象 @service
但您应该能够创建另一个名为 amount_in_dollars
:
的方法
def amount_in_dollars
amount / 100.to_d
end
然后用数字转货币的方法:
<p><%= number_to_currency(@service.amount_in_dollars) %></p>
或者你可以直接在视图中分割它(但我更喜欢第一个变体)
<p><%= number_to_currency(@service.amount / 100.to_d) %></p>
Stripe 将值存储为美分。来自 docs:
Zero-decimal currencies
All API requests expect amounts to be provided in a currency’s smallest unit. For example, to charge 10 USD, provide an amount value of 1000 (i.e., 1000 cents).
我假设 API 响应 工作相似。
要获得正确的输出,您必须将 USD 值除以 100,例如:
<%= number_to_currency(@service.amount.fdiv(100)) %>
还有 Money gem 可能是更好的选择。它同时存储价值(以美分表示)及其货币,并带有格式:
require 'money'
money = Money.new(@service.amount, @service.currency)
#=> #<Money fractional:2895 currency:USD>
money.format
#=> ".95"
如果 @service.amount
等于 28.95 美元:
<p><%= number_to_currency(@service.amount) %></p>
输出的是$2895.00,不是我上面写的。查找后没有找到解决方法。
@service.amount
是一个整数,因为 Stripe 只接受整数。
number_to_currency
不希望获得美分金额。它认为它是美元。您需要做的是将以美分为单位的金额转换为美元,然后将其发送到 number_to_currency
方法。
我不知道什么是对象 @service
但您应该能够创建另一个名为 amount_in_dollars
:
def amount_in_dollars
amount / 100.to_d
end
然后用数字转货币的方法:
<p><%= number_to_currency(@service.amount_in_dollars) %></p>
或者你可以直接在视图中分割它(但我更喜欢第一个变体)
<p><%= number_to_currency(@service.amount / 100.to_d) %></p>
Stripe 将值存储为美分。来自 docs:
Zero-decimal currencies
All API requests expect amounts to be provided in a currency’s smallest unit. For example, to charge 10 USD, provide an amount value of 1000 (i.e., 1000 cents).
我假设 API 响应 工作相似。
要获得正确的输出,您必须将 USD 值除以 100,例如:
<%= number_to_currency(@service.amount.fdiv(100)) %>
还有 Money gem 可能是更好的选择。它同时存储价值(以美分表示)及其货币,并带有格式:
require 'money'
money = Money.new(@service.amount, @service.currency)
#=> #<Money fractional:2895 currency:USD>
money.format
#=> ".95"