将输入字符串形式设置为浮动


Form input strings to float

我有一个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个可选参数:

  1. 数字2->表示所需的小数位数

  2. 一个点(.),它是十进制分隔符,和

  3. 逗号(,),如果需要,它是要使用的千位分隔符。

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