Php 为什么“FILTER\u VALIDATE\u NUMBER\u FLOAT”常量会删除小数点字符?

Php 为什么“FILTER\u VALIDATE\u NUMBER\u FLOAT”常量会删除小数点字符?,php,Php,输入:100.25 输出:10025 如何保留字符?试试这个 $quantity = filter_input(INPUT_GET, 'quantity', FILTER_SANITIZE_NUMBER_FLOAT); .您想要: $quantity = filter_input( INPUT_GET, 'quantity', FILTER_SANITIZE_NUMBER_FLOAT,

输入:
100.25

输出:
10025

如何保留
字符?

试试这个

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

您想要:

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

呜呜。。您仍然希望使用当前的
filter\u input
,以及相同的前两个参数。我最终使用了
filter\u var
,这样我就可以在代码板中测试它了,但忘记了将其更改回去:P

阅读文档表明

filter\u SANITIZE\u FLOAT
具有以下效果:

删除除数字、+-和(可选)eE以外的所有字符

将这句结构相当糟糕的句子扭转过来:

这将从输入中删除除数字(0-9)以外的所有字符。使用可选标志,也可以允许字符。(点),(逗号)e(指数)和e(指数)

因此,您的代码示例不是乘法,而是去掉小数点

解决方案

您需要在函数调用中设置选项
FILTER\u FLAG\u ALLOW\u FRACTION
,以允许小数点:

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

print_r($quantity);

或者,使用
FILTER\u VALIDATE\u FLOAT
,如果不匹配,则使用快速反馈说明:

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

答案已经回答了。文件是。不幸的是,这不是很直观。在这种情况下,需要使用消毒过滤器,并且必须提供补充过滤器标志(post中缺少该标志)。(此外,post代码不会乘以100:它会删除“违规”小数,请尝试输入“100.1234:-)如果没有
filter\u FLAG\u ALLOW\u FRACTION
,我不理解这个过滤器的意义-肯定“float”的定义就是它有一个“float”点,即十进制?@Andy我认为原因是。。。菲律宾语:我想你是对的,自从我写了那篇评论后,我已经对PHP的其他怪异之处挠头好几次了。P.S:你的网站字体让我想起了老式的点击式游戏:)@Andy我当时痴迷于模拟器D
    $quantity = (filter_input(INPUT_GET, 'quantity', FILTER_VALIDATE_FLOAT))
                ?filter_input(INPUT_GET, 'quantity', FILTER_VALIDATE_FLOAT):
                "Invalid Decimal Number";

    print_r($quantity);