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

0

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

  • Стоимость продукта (без НДС) = 12,40 ($ product)
  • Процент НДС = 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,',','.'));

Затем общее value = 30,01

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

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

Теги:
percentage

3 ответа

1
Лучший ответ

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

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

Привет, друг!

0

Вот несколько примеров того, как числа округляются с функциями 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

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

0

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

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

$total = floor(($product * 200)) / 100 + $vat;
echo(number_format($total,2,',','.'));
  • 0
    Не могли бы вы отправить меня в направлении, чтобы решить это?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню