2

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
}

この余分なペニーまたは不足しているペニーの問題を回避する丸め方法を使用することは可能ですか? その丸め方法は何ですか?

それとも、これは数学的に解決できない問題ですか?

4

3 に答える 3

2

数値を四捨五入すると、情報は失われます。あなたの問題に対する最善の解決策は、丸めをやめて (とにかくお金でやるべきではありません)、どこかに値を表示しているときにだけ丸めることです。

于 2012-09-28T16:40:50.803 に答える
2

最新の Ruby Money gem は端数セントをサポートしています。これにより、お金のオブジェクトが別の通貨に変換され、元の通貨に戻されたときに、その値が保持されることが保証されます。したがって、不足/余分な問題はありません。

于 2012-10-02T12:07:33.150 に答える