우리는 Ruby 's 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 달러가되면 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
}
이 추가되거나 누락 된 페니의이 문제를 방지하기 위해 반올림 방법을 가질 수 있습니다 :이 우리가 사용하고있는 환율입니까? 그 반올림 방법은 무엇입니까?
또는 수학적으로 해결할 수없는 문제입니까?
감사합니다. 너의 의도를 알 겠어. 반올림하지 말고, float 값을 저장하는 것을 의미한다고 생각합니다. 그러나 Ruby의 Money gem이 분수 센트 (또는 펜스)를 허용하지 않는다고 생각합니다.
나는 Money 레벨이 아닌 어플리케이션 레벨에서 이것을 해결해야한다고 생각한다. –체크 표시가 인정 될 것입니다. 내가 정말로 필요로하는 것은 아니지만, 처음에는 이것이 당신의 대답이고, 두 번째는 사람들이 당신에게 대답하도록 동기를 부여한다는 것을 보여줍니다. 내가 대답 할 때 나는 당신의 수용 비율을 보았으나 어쨌든 그것을했다. 비율이 높으면 3 개 이상의 답을 얻었을 것입니다. – CQQL
반올림하지 않는 것이 일반적으로 좋습니다. 그러나 루비 머니 젬의 맥락에서 루비 머니 오브젝트의 정확성은 분수 센트가 아닌 전체 센트만큼 가능하지 않습니다. 생각? –