为什么“FILTER_VALIDATE_NUMBER_FLOAT”常量会删除小数位字符?

php
2022-08-30 13:52:10
$quantity = filter_input(INPUT_GET, 'quantity', FILTER_SANITIZE_NUMBER_FLOAT);

输入:100.25

输出:10025

如何保留角色?.


答案 1

试试这个...

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

密码键盘


答案 2

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

推荐