Почему константа `FILTER_VALIDATE_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, FILTER_FLAG_ALLOW_FRACTION ); 

CodePad .

Чтение документации http://www.php.net/manual/en/filter.filters.sanitize.php показывает, что FILTER_SANITIZE_NUMBER_FLOAT имеет следующий эффект:

Удалите все символы, кроме цифр, + – и опционально., EE.

Превращение этого довольно плохо сформулированного предложения вокруг:

Это удаляет все символы с ввода, кроме цифр (0-9). С дополнительными флагами можно также разрешить символы. (точка), (запятая) e (показатель степени) и E (показатель степени)

Таким образом, ваш пример кода не умножается, но он лишает десятичную точку.

Решение :

Вам нужно установить в FILTER_FLAG_ALLOW_FRACTION функции FILTER_FLAG_ALLOW_FRACTION чтобы разрешить десятичную точку:

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

Вы хотите:

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

http://codepad.org/ch66qJru

Woops .. Вам нужно будет по-прежнему использовать filter_input как вы сейчас, а также те же первые два аргумента. Я закончил использование filter_var чтобы проверить его в кодексе и забыл изменить его: P

Кроме того, используйте FILTER_VALIDATE_FLOAT с 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);