PHP — Проблема расчета НДС с десятичными дробями

#php

#php

Вопрос:

Пытаюсь управлять ценами на продукты в моей базе данных, но возникли «проблемы с округлением».

Мой пользователь вводит «цену продукта», включая НДС. Пользователь вводит «100,00» в поле,

И я сохраняю его в базе данных без учета НДС. (НДС 18%) 100/1.18 = 84 7457. (Моя база данных имеет 2 десятичных знака)

Есть 2 варианта для выполнения расчета:

  1. Округлите в меньшую сторону, и результат будет 84,74.
  2. Округлите, и результат будет 84,75.

После того, как я сделаю запись в базу данных, я должен показать цену продукта на интерфейсе, включая НДС.

Если мое значение в базе данных становится 84,74, я должен показать его как; 84,74 * 1,18 = 99,9932, и результат будет: 99,99.

Если мое значение в базе данных равно 84,74, результат будет 84,75 * 1,18 = 100,005 (и округлит его до 100,01)

Поэтому я не смог решить эту проблему с округлением. Каков наилучший способ?

Если я использую стандарт «округления» везде, то я буду вычислять неправильно. Если я везде использую стандарт «округления в меньшую сторону», это будет неправильно.

Я попробовал методы «без десятичных, только целочисленных», но результат не изменился. Та же проблема продолжается: какой стандарт я должен использовать.

Комментарии:

1. Что делать, если вы храните 2 цены: с НДС и без него.

2. Я думаю, это может вызвать некоторые проблемы с бухгалтером из-за округления.

3. «Это может вызвать некоторые проблемы с бухгалтером» — как? Вам все равно нужно что-то хранить. Тем не менее, это больше не похоже на техническую проблему: если это вызывает проблемы с бухгалтерией — спросите своего бухгалтера, как с этим справиться.

Ответ №1:

Вы могли бы хранить больше десятичных дробей, это, я думаю, сработает. Кроме того, вы должны / могли бы сохранить значение НДС в базе данных и вместо пересчета в процентах просто добавить значение НДС к сохраненной цене, чтобы получить 100?

Потому что таким образом у вас есть 84,75 15,25 = 100

Ответ №2:

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

Если вам нужно сохранить рассчитанный НДС в БД, сделайте это с большим количеством мест. Это позволит вашим бухгалтерам использовать числа так, как им нужно, без вмешательства.