Форма входных строк для плавания

У меня есть php-форма, которая собирает данные, в основном строки, и отправляет их в файл XML для хранения.
Я хотел бы, чтобы один из входных данных захватил цену (float), а затем вычел процент, привязанный к этой учетной записи пользователя (сохраненный в mysql), сохранив оба значения в xml-файле.

текущий код выглядит так:

$price = $_POST['product_price'];
$our_price = $price - $user['product_fee'];

Это, очевидно, не сработает, потому что оба значения хранятся в виде строк, а не с плавающей точкой.

Для этого есть простое решение, я явно что-то здесь упускаю.

0

Решение

Вы могли бы использовать floatval разбирать строки как поплавки.

$price = floatval($_POST['product_price']);
$our_price = $price - floatval($user['product_fee']);

Предупреждение: Прочитайте ПРЕДУПРЕЖДЕНИЕ в php всплывающая страница о точности !!!


Обновить:

Чтобы показать две десятичные точки для плавающего значения, вы можете использовать number_format () функционировать как:

echo number_format(floatval($our_price), 2, '.', '');

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

$new_float = floatval(number_format(floatval($our_price), 2, '.', ''));

Замечания: За number_format здесь мы также передали 3 необязательных параметра после float:

  1. Число 2 -> для количества десятичных знаков, необходимых

  2. Точка (.) который является десятичным разделителем, и

  3. Запятая (,), который является разделителем тысяч, который будет использоваться при необходимости.

2

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

PHP не очень строг в отношении типов данных. Вы должны быть в состоянии вычесть две строки (и да, это очень странно). Например, это прекрасно работает:

$var = '100.00';
$var2 = '20.00';
var_dump($var - $var2);

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

$price = (float) $_POST['product_price'];

Положив (float) перед переменной, вы заставляете $price быть значением с плавающей точкой. Вы можете сделать то же самое за плату, а затем вы сможете вычесть их.

0

PHP вполне терпим в этом смысле — он будет анализировать ваши переменные и автоматически приводить их тип:

fike@v-lubuntu:~$ php -r 'var_dump("12.31" - "0.17");'
double(12.14)

Как сказано выше, вы можете использовать floatval() или тип литья ($var = (float) $string) выполнить приведение типа вручную. Что нужно сказать на 100%, так это то, что вы должны тысячу раз знать о том, к чему будут приводить ваши переменные, поскольку это выражение вполне допустимо и будет возвращать true:

true == 'true'

Для принудительной проверки типа вам нужно использовать дополнительный оператор равенства:

true === 'true' // false
true !== 'true' // true
0
По вопросам рекламы [email protected]