首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于Ruby Money gem来说,最好的rounding_method是什么?

对于Ruby Money gem来说,最好的rounding_method是什么?
EN

Stack Overflow用户
提问于 2012-09-29 00:36:27
回答 3查看 1.6K关注 0票数 2

我们用的是Ruby的钱宝石。在我们的应用程序中,我们还可以在货币之间进行转换。

因此,当您在货币之间进行转换时,就会出现舍入问题。目前我们使用的是Ruby的内置Float#round

然而,这引入了“悬挂的便士”问题。

代码语言:javascript
复制
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美元,然后再转换回来!以下是我们使用的汇率:

代码语言:javascript
复制
{
  "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
}

有没有可能有一种四舍五入的方法来避免这种额外或丢失一分钱的问题?舍入方法是什么?

或者这是一个数学上无法解决的问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-29 00:40:51

一旦你舍入一个数字,信息就会丢失。问题的最佳解决方案是停止四舍五入(无论如何,您不应该对金钱进行舍入),而只在显示某个值时进行舍入。

票数 2
EN

Stack Overflow用户

发布于 2012-10-02 20:07:33

最新的Ruby Money gem支持分数美分。这将确保当货币对象被转换为另一种货币并返回到其自身时,其价值将被保留。因此不存在丢失/额外的美分问题。

票数 2
EN

Stack Overflow用户

发布于 2016-12-22 13:31:27

在现实世界中,这可能不是什么大问题,因为"from“和"to”的汇率并不是相反的。

另一方面,您需要来回转换的场景是什么?我能想到的唯一场景是,你将一堆不同货币的货币对象相加:

1美元、2欧元、3美元

这将触发从美元到欧元再到美元的货币兑换。如果是这种情况,在汇总许多货币对象时,尝试使用https://github.com/lulalala/money-collection跳过不必要的货币兑换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12643988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档