Подтвердить что ты не робот

Почему константа `FILTER_VALIDATE_NUMBER_FLOAT` сбрасывает символ десятичного знака?

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

Вход: 100.25

Выход: 10025

Как сохранить символ .?

4b9b3361

Ответ 1

Попробуйте это...

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

CodePad.

Ответ 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);

Ответ 3

Вы хотите:

$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

Ответ 4

В качестве альтернативы используйте 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);