我有一个php表单,它捕获数据,主要是字符串,并将其提交到XML文件中进行存储。我希望其中一个输入捕获一个价格(浮动),然后减去与该用户帐户相关的百分比(存储在mysql中),将这两个值存储在xml文件中。
当前代码如下:
$price = $_POST['product_price'];
$our_price = $price - $user['product_fee'];
这显然不起作用,因为这两个值都存储为字符串,而不是浮点值。
有一个简单的解决方案,我显然在这里遗漏了一些东西。
您可以使用floatval将字符串解析为float。
$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个可选参数:
数字
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