首页 > 解决方案 > 增加百分比的值总和不断给出错误的结果

问题描述

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

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

谁能帮我解决这个问题?

标签: ruby-on-railssumdecimalnumeric

解决方案


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

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

推荐阅读