Расчет общей цены по строковому значению в php - PullRequest
1 голос
/ 12 октября 2011

У меня есть интернет-магазин, и на странице корзины он дает мне отдельную цену для каждого продукта, но мне нужна общая цена.

, чтобы сделать это, мне нужно рассчитать все этизначения вместе, и это нормально.

Но что меня беспокоит, так это то, что я должен вычислить сумму переменных, которые приведены в этом формате:

$455.00

Каков наилучший способ извлечьзначение "455", чтобы потом я мог добавить его к другому значению?

Надеюсь, я дал понять ...

Ответы [ 7 ]

4 голосов
/ 12 октября 2011

Не используйте float, вместо этого используйте целое число в центах. Число с плавающей точкой не является точным (см. Точность с плавающей точкой ), поэтому при использовании чисел с плавающей точкой вычисление может быть неудачным Это особенно обременительно, если это связано с платежами.

$str = '$455.00';
$r = sscanf($str, '$%d.%d', $dollar, $cent);
if ($r <> 2 or $cent > 99 or $cent < 0 or $dollar > 9999 or $dollar < 0) throw new Exception(sprintf('Invalid string "%s"', $str));

$amountInDollarCents = $dollar * 100 + $cent;

echo $str, ' -> ', $amountInDollarCents;

Демо

0 голосов
/ 12 октября 2011

Прошло много времени с тех пор, как я работал с PHP, поэтому я не знаю, как лучше всего работать с валютой.Одним из быстрых методов было бы удалить «$» и «.» И просто сложить полученное значение как целое число.

используйте, например, str_replace () и замените "$" и "."с пустой строкой: http://se2.php.net/manual/en/function.str-replace.php

Это даст вам всю сумму в центах (что позволит избежать некоторых потенциальных проблем с округлением).Затем вы можете разделить его на 100 и отформатировать так, как вам нравится, для отображения суммы в долларах.

0 голосов
/ 12 октября 2011

Похоже, ваша программа делает это неправильно.Вы должны действительно представлять все цены как (двойные) вместо строки.Тогда только тогда, когда вам нужно показать цену пользователю, вы добавите к нему знак $, преобразовав его в строку.Но ваша программа должна действительно рассматривать цены как числа, а не как строки.Если вы храните свою цену в базе данных в виде строки «$ 5,99», то вы действительно делаете это неправильно.

0 голосов
/ 12 октября 2011

А как насчет следующего:

$amount = array();
$amount[0] = '$455.15';
$amount[2] = '$85.75';

$total = 0;
foreach ($amount AS $value) {
    $value = str_replace('$', '', $value);
    $total += $value;
}
echo $total . "\n";

Операция очистки:

$value = str_replace('$', '', $value);

Возможно, вы захотите извлечь его в функцию, особенно если вам нужно использовать его более чем в одном месте.

Еще одна вещь, о которой стоит подумать: почему у вас такая ценность? Это формат отображения, и такое преобразование должно выполняться последним, в идеале с помощью шаблона. Возможно, если это возможно, вам следует подумать о том, чтобы исправить код раньше, а не применять такой патч.

0 голосов
/ 12 октября 2011

Это преобразует вашу строку в число с плавающей точкой:

$price = (float)substr("$455.00", 1);
echo($price);

Для получения дополнительной информации вы можете увидеть этот ответ , в котором есть несколько хороших ссылок для вас.

0 голосов
/ 12 октября 2011

Я думаю, что ваш сайт ECommerce имеет только $ (USD)

$price= substr($string_price,1);
0 голосов
/ 12 октября 2011

Если вам нужен только знак доллара, используйте str_replace. Чтобы преобразовать это в int или float, введите его. Однако использование float приводит к неточным вычислениям, поэтому будьте осторожны с этим!

$newval = (int)str_replace('$', '', '$455.00');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...