首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby/Rails如何计算和舍入价格?

Ruby/Rails如何计算和舍入价格?
EN

Stack Overflow用户
提问于 2014-02-25 17:17:09
回答 2查看 1.5K关注 0票数 0

开发发票,我遇到数学四舍五入的问题,我的单位价格和总数并不是完美的加起来。出现此问题的原因是业务需求,即根据特定条件将隐藏的佣金传递给客户。我必须在幕后把每一项价格和总额乘以佣金百分比。

例如,未四舍五入的计算价格乘以佣金。

代码语言:javascript
复制
Item            Name         qty    Price2  qty2    Price   Total
Kitchen Counter Uba Tuba     100.0  72.4275 100.0   18.125  9055.249999999999   9055.249999999999
Vanity          Uba Tuba     100.0  72.4275 100.0   18.125  9055.249999999999   9055.249999999999
                                        Grand Total         18110.5

现在,使用应用的rails number_to_currency助手,数字被关闭。

代码语言:javascript
复制
Kitchen Counter Uba Tuba     100.0  $72.43  100.0   $18.13  1   $9,055.25   $9,055.25
Vanity          Uba Tuba     100.0  $72.43  100.0   $18.13  1   $9,055.25   $9,055.25

由于价格的四舍五入,如果一个顾客自己计算,总数就不算了。

代码语言:javascript
复制
rounded total = $9056.00

如何以编程方式解决这一问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-25 17:27:40

如果要消除项目总数中的四舍五入误差,则在计算总计之前,需要将折扣单价乘以两个小数位数,即

代码语言:javascript
复制
qty = 100.0
price = 18.125
qty2 = 100.00
price2 = 72.4275

total = qty * price.round(2) + qty2 * price2.round(2)
total.round(2) # happens in number_to_currency
#=> 9056.0

而不是你目前正在做的事情

代码语言:javascript
复制
total = qty * price + qty2 * price2
total.round(2) # happens in number_to_currency
#=> 9055.25
票数 1
EN

Stack Overflow用户

发布于 2014-02-25 17:22:39

也许金钱-铁路的宝石是有用的!

如果您想手动操作,您应该考虑将您的价格存储为Integer值!其中x的价格意味着x$美分或x几十美元美分。通过这样做,您可以消除数据库中的所有四舍五入问题。

此外,货币助手的使用将帮助您正确地向视图显示事物。

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

https://stackoverflow.com/questions/22021457

复制
相关文章

相似问题

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