添加百分比的值总和不断给出错误结果

Sum of values with added percentage keeps giving wrong result

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

假设我有 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

显示如下:

现在我要加总行。我试过这样的事情:

 - 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

谁能帮我解决这个问题?

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

(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) }