Как правильно делать математику с большими числами в PHP - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь отобразить общую сумму, которая равна цене продукта, умноженной на количество.

Это прекрасно работает для чисел до 1000, но выше этой точки добавляется точка, и мой сценарий ломается.Как я могу это исправить?

У меня есть эти числа:

150,00
1.200,00

Они зациклены с переменной $price.

Затем я заменяю все запятые для точек, как эта:

$subtotalreken = str_replace(',','.',$price);

$subtotalreken then contains:

150.00
1.200.00

Затем умножьте это на количество, подобное этому:

$totalfinal = $subtotalreken * $cart['quantity'];

Количество равно 2 для обоих продуктови если я эхо $totalfinal, это мой результат:

300
2.4

Почему это 2,4?А не 2.400?

Мне нужен европейский / голландский формат, поэтому точки через каждые три числа и центы после запятой.Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Предполагая, что «число» использует запятую в качестве десятичной дроби и точки в качестве разделителя тысяч: удалите все точки и замените запятую точкой, чтобы 1.234,56 стало 1234.56:

$value = (float) strtr("1.234,56", ["." => "", "," => "."]); // 1234.56

Вы можете отформатироватьзначение снова, используя number_format:

echo number_format($value, 2, ",", "."); // 1.234,56
0 голосов
/ 13 февраля 2019

Перед вычислениями удалите любое форматирование из своего числа (просто убедитесь, что у вас всегда есть число с двумя десятичными разрядами):

$number = preg_replace('/[^\d]/', '', $input);

Затем выполните вычисления (число в центах) и покажите отформатированному пользователю число:

echo number_format($number * $qunatity / 100, '.', ',', 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...