У меня есть php-форма, которая собирает данные, в основном строки, и отправляет их в файл XML для хранения.
Я хотел бы, чтобы один из входных данных захватил цену (float), а затем вычел процент, привязанный к этой учетной записи пользователя (сохраненный в mysql), сохранив оба значения в xml-файле.
текущий код выглядит так:
$price = $_POST['product_price'];
$our_price = $price - $user['product_fee'];
Это, очевидно, не сработает, потому что оба значения хранятся в виде строк, а не с плавающей точкой.
Для этого есть простое решение, я явно что-то здесь упускаю.
Вы могли бы использовать 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:
Число 2
-> для количества десятичных знаков, необходимых
Точка (.
) который является десятичным разделителем, и
Запятая (,
), который является разделителем тысяч, который будет использоваться при необходимости.
PHP не очень строг в отношении типов данных. Вы должны быть в состоянии вычесть две строки (и да, это очень странно). Например, это прекрасно работает:
$var = '100.00';
$var2 = '20.00';
var_dump($var - $var2);
Что вернется float(80)
в следствии.
Но если строки всегда представляют значения с плавающей точкой, вы можете типаж их, чтобы быть уверенным. Подобно:
$price = (float) $_POST['product_price'];
Положив (float)
перед переменной, вы заставляете $price
быть значением с плавающей точкой. Вы можете сделать то же самое за плату, а затем вы сможете вычесть их.
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