Сумма значений с добавленным процентом продолжает давать неверный результат - PullRequest
0 голосов
/ 24 сентября 2018

Я получаю неправильные суммы, когда хочу суммировать цены, а затем добавить к ним НДС.У меня следующая ситуация:

Допустим, у меня есть 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

Ктоможет помочь мне с этим?

1 Ответ

0 голосов
/ 24 сентября 2018

Правильная сумма НДС для одного продукта:

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