为什么`FILTER_VALIDATE_NUMBER_FLOAT`常量会丢弃小数位字符?

时间:2011-05-20 02:13:23

标签: php

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

输入:100.25

输出:10025

如何保留.字符?

4 个答案:

答案 0 :(得分:49)

试试这个......

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

CodePad

答案 1 :(得分:19)

阅读文档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);

答案 2 :(得分:7)

你想:

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

print_r($quantity);

http://codepad.org/ch66qJru

Woops ..你现在仍然希望使用filter_input和前两个args一样。我最终使用filter_var所以我可以在键盘中测试它并忘记将其更改回来:P

答案 3 :(得分:0)

或者,如果不匹配,请使用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);