【问题标题】:Sum of values with added percentage keeps giving wrong result增加百分比的值总和不断给出错误的结果
【发布时间】:2019-02-28 09:28:44
【问题描述】:

当我想对价格求和然后添加增值税时,我总是得到错误的金额。 我有以下情况:

假设我有 4 种产品,我希望它们在发票上显示。每个产品的价格都是2.50。

我有以下代码:

@products = Product.find([1,2,3,4])

在我的发票上:

@products.each do |product|

  %p
    Price without VAT:
    = number_to_currency(product.price) --> Gives € 2,50

  %p
    Price with 21% VAT: 
    = number_to_currency(product.price / 100 * 121) --> Gives € 3,03

显示如下:

  • 不含增值税的价格:2.50 欧元
  • 含 21% 增值税的价格:3.03 欧元

现在我想添加一个总行。我尝试过这样的事情:

 - sum = @products.sum( &:price ) --> Gives 10
%p
  Total with 21% VAT: 
  = number_to_currency(sum / 100 * 121 ) --> Gives € 12,10 instead of € 12,12

我尝试过,总价格包括增值税 12.10 欧元,而不是 12.12 欧元。 (4 x 3.03 欧元 = 12.12 欧元)

我的数据库中的价格为:

t.decimal "price"

价格存储为 2.5

谁能帮我解决这个问题?

【问题讨论】:

  • 你的数学错了..应该是((product.price * 121) / 100)。没有?
  • 不,添加增值税应该是:价格 / 100 * 121。(2.50 / 100)* 121 = 3,025 -> € 3,03
  • 当实际价格为 100 时,我读起来好像它需要 121 加增值税,对吗?
  • 成本为 2.50,不含增值税。加上 21% 的增值税是 3.03
  • 暂时忘记你的号码。假设你有 100 个,加上 21% 的增值税,现在这个数字是多少?

标签: ruby-on-rails sum decimal numeric


【解决方案1】:

一种产品的正确增值税金额:

(BigDecimal.new("2.5") / 100 * 121).to_f #=> 3.025

4 个产品正确的增值税金额:

(BigDecimal.new("10") / 100 * 121).to_f #=> 12.10

选项:

  1. 不要四舍五入,然后你可以从总和计算总增值税
  2. 四舍五入,然后将总增值税计算为每个产品增值税金额的总和

应用上述内容,1 件产品含增值税:

(product.price / 100 * 121).round(2)

所有含增值税的产品:

products.sum { |p| (p.price / 100 * 121).round(2) }

【讨论】:

  • 你为什么要把它转换成BigDecimal
  • @ArupRakshit 他的数据类型十进制,所以我只是复制
  • 但是在发票上您必须使用向上取整的价格。因此,一件产品的价格为 3,03 欧元,如果我使用您的代码,我再次获得 4 件产品的价格为 12,10 欧元,而不是 4 x 3,03
  • 你不需要BigDecimal。只要做10 / 100.0 * 121它会浮点数学。
  • @Jerry 我深深地希望随着时间的推移你会回到这个问题并嘲笑你现在所说的。无论如何,1 件带有增值税的产品:(product.price / 100 * 121).round(2),4 件带有增值税的产品:products.sum { |p| (p.price / 100 * 121).round(2) }
猜你喜欢
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
相关资源
最近更新 更多