Как рассчитать с помощью php сумму с процентом НДС в Stack Overflow

Я пытаюсь сделать расчет со следующими значениями:

  • Стоимость продукта (без НДС) = 12,40 ($ продукт)
  • Процент НДС = 21%, что я буду хранить в базе данных как 0,21 ($ vat_perc)
  • НДС составляет 2 604 (НДС)

редактировать: НДС за продукт

Когда я пытаюсь получить общую сумму, тогда я получаю 15,00 (общая сумма)

Я сделал следующее:

$total = $product + $vat

Это будет эхо 15.004

Тогда я использую number_format:

echo(number_format($total,2,',','.'));

Это напечатает 15.00

Но тогда я хочу умножить произведение на 2

Так что это даст следующий расчет:

$total = $product * 2 + $vat

Затем снова я использую формат:

echo(number_format($total,2,',','.'));

Тогда общая сумма = 30,01

Я пробовал несколько таких вещей, как ROUND en INT, но безуспешно.

Что я делаю не так в этом? Я знаю, что НДС здесь злой, но я не знаю, как это исправить.

0

Решение

$tax = round( ($price / 100) * 3.8, 2);
налог округляется цена делится на 100, чтобы сделать четкий процент. Умножается на требуемый стек
затем вы делаете дополнение к или из вашей таблицы цен.

Хорошо, что вы разговариваете по телефону — может быть, мы сможем решить это быстрее по телефону. Слава богу за телефоны!

Ура, приятель!

1

Другие решения

Вот несколько примеров того, как числа округляются с помощью функций PHP.

$product = 12.40;
$vat = 2.644;
$total = ( $product + $vat ) * 2;

var_dump( $total );  // float(30.088)
var_dump( number_format($total,2,',','.') );  // string(5) "30,09", rounded
var_dump( round( $total, 2 ) );  // float(30.09), rounded
var_dump( sprintf('%0.2f', $total ) );  // string(5) "30.09", rounded
var_dump( floor( $total * 100 ) / 100 );  //  float(30.08), not rounded

Все три основания ( number_format, round, sprintf ) округлит результат, чтобы избежать округления и отбросить десятичную часть после двух десятичных знаков, которые вы можете использовать в последнем примере.

0

Ваш начальный итог 15,004, поэтому, когда вы звоните number_format округляется до 15.00. Теперь, когда вы умножаете на 2, ваш итог 15.008 который number_format будет округлять до 15.01. Проблема не в сложении, а в умножении на 2. number_format раунды до ближайшего места, которое для вашего случая будет 30.01.

Если вы хотите, чтобы число постоянно округлялось, используйте floor, вот так:

$total = floor(($product * 200)) / 100 + $vat;
echo(number_format($total,2,',','.'));
0
По вопросам рекламы [email protected]