ruby-on-rails - 增加百分比的值总和不断给出错误的结果
问题描述
当我想对价格求和然后添加增值税时,我总是得到错误的金额。我有以下情况:
假设我有 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
谁能帮我解决这个问题?
解决方案
一种产品的正确增值税金额:
(BigDecimal.new("2.5") / 100 * 121).to_f #=> 3.025
4 产品正确的增值税金额:
(BigDecimal.new("10") / 100 * 121).to_f #=> 12.10
选项:
- 不要四舍五入,然后您可以从总和计算总增值税
- 向上取整,然后将总增值税计算为每种产品的增值税金额之和
应用上述内容,1 件带有增值税的产品:
(product.price / 100 * 121).round(2)
所有含增值税的产品:
products.sum { |p| (p.price / 100 * 121).round(2) }
推荐阅读
- python - 直接更改 RAW 照片数据
- angularjs - 使用 BDD 示例介绍定位器
- python - Python Kivy 如何将使用 Python 制作的小部件注入到 kv 文件中的布局中
- php - 在 Laravel 中不返回 JSON 响应
- webpack - Webpack 热模块不刷新浏览器
- kotlin - 获取 Ktor http 请求的内容
- vue.js - Vue,更改本机事件不起作用,输入本机确实
- c# - C# eBay OAuth 合规性 API 身份验证问题
- .net-core - 粒度域事件
- java - 如何在 Selenium Webdriver POM 模型中打印 WebElement 变量名?