php 为什么`FILTER_SANITIZE_NUMBER_FLOAT`常量删除小数位字符?

monwx1rj  于 5个月前  发布在  PHP
关注(0)|答案(4)|浏览(70)
$quantity = filter_input(INPUT_GET, 'quantity', FILTER_SANITIZE_NUMBER_FLOAT);

字符串
输入:100.25
输出:10025
如何保存.字符?

wwtsj6pe

wwtsj6pe1#

或者,使用FILTER_VALIDATE_FLOAT,如果不匹配,请提供快速反馈:

$quantity = (filter_input(INPUT_GET, 'quantity', FILTER_VALIDATE_FLOAT))
                ?filter_input(INPUT_GET, 'quantity', FILTER_VALIDATE_FLOAT):
                "Invalid Decimal Number";

    print_r($quantity);

字符串

35g0bw71

35g0bw712#

试试这个...

$quantity = filter_input(
              INPUT_GET, 
              'quantity', 
              FILTER_SANITIZE_NUMBER_FLOAT, 
              FILTER_FLAG_ALLOW_FRACTION
            );

字符串
CodePad的一个。

gwo2fgha

gwo2fgha3#

阅读文档http://www.php.net/manual/en/filter.filters.sanitize.php表明FILTER_SANITIZE_NUMBER_FLOAT具有以下效果:
删除除数字、+-和可选的.、eE之外的所有字符。
把这句不太好的句子转过来:
这将从输入中删除除数字(0-9)以外的所有字符。使用可选标志,还可以允许字符。(点),(逗号)e(指数)和E(指数)
因此,您的代码示例不是乘法,而是去掉小数点。

解决方案

您需要在函数调用中设置选项FILTER_FLAG_ALLOW_FRACTION以允许小数点:

$quantity = filter_input(INPUT_GET, 'quantity', FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);

字符串

lhcgjxsq

lhcgjxsq4#

您需要:

$quantity = filter_var(100.25, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);

print_r($quantity);

字符串
http://codepad.org/ch66qJru
哎呀..你仍然想使用filter_input,因为你目前有以及相同的前两个参数。我结束了使用filter_var,所以我可以在codepad中测试它,忘记把它改回来了:P

相关问题