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);