我們使用Ruby的Money gem。在我們的應用程序中,我們也在貨幣之間轉換。什麼是Ruby Money gem的最佳rounding_method?
因此,當您在貨幣之間進行轉換時,出現舍入問題。目前我們正在使用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
}
是否有可能有一個四捨五入的方法來避免額外的或丟失一分錢的這個問題呢?這個舍入方法是什麼?
或者這是一個數學上不可解的問題?
謝謝。我明白你的意思。不是四捨五入,我認爲你的意思是存儲浮點值。但是,我不認爲Ruby的Money寶石允許分數分(或便士)。
我想我可能必須在應用程序級別解決這個問題,而不是在Money寶石級別。 –複選標記將不勝感激。不是我真的需要它,但首先它表明這是你的答案,其次它讓人們更有動力回答你。正如我回答,我看到了你的接受比例,但我仍然這樣做了。如果你的百分比較高,你會得到3 +以上的答案,甚至更快。 – CQQL
四捨五入是一個好主意。但是在Ruby Money gem的情況下,這似乎不可能,因爲Ruby money對象的準確性是整個分數,而不是分數分。思考? –