我们正在使用 Ruby 的 Money gem。在我们的应用程序中,我们也在货币之间进行转换。
因此,当您在货币之间进行转换时,就会出现四舍五入的问题。目前我们正在使用 Ruby 的内置Float#round
.
然而,这引入了“悬空一分钱”的问题。
Money.new(500,'USD').exchange_to('EUR')
#=> #Money cents:385 currency:EUR
Money.new(500,'USD').exchange_to('EUR').exchange_to('USD')
#=> #Money cents:501 currency:USD
所以 5.00 美元在转换为欧元后变为 5.01 美元,然后再返回!这些是我们使用的汇率:
{
"GBP_TO_USD"=>1.6,
"USD_TO_GBP"=>0.625,
"GBP_TO_EUR"=>1.2,
"EUR_TO_GBP"=>0.8333333333333334,
"EUR_TO_USD"=>1.3,
"USD_TO_EUR"=>0.7692307692307692
}
是否有可能有一种舍入方法来避免额外或丢失一分钱的问题?这种四舍五入的方法是什么?
或者这是一个数学上无法解决的问题?