php - periodico - ¿Por qué la constante `FILTER_VALIDATE_NUMBER_FLOAT` elimina el carácter de lugar decimal?
numeros periodicos a fraccion (4)
$quantity = filter_input(INPUT_GET, ''quantity'', FILTER_SANITIZE_NUMBER_FLOAT);
Entrada: 100.25
Salida: 10025
¿Cómo puedo preservar el .
¿personaje?
Al leer la documentación http://www.php.net/manual/en/filter.filters.sanitize.php muestra que FILTER_SANITIZE_NUMBER_FLOAT
tiene el siguiente efecto:
Elimine todos los caracteres excepto los dígitos, + - y opcionalmente, eE.
Dando vuelta a esta oración algo mal formada:
Esto elimina todos los caracteres de la entrada excepto los dígitos (0-9). Con las banderas opcionales, es posible también permitir los caracteres. (punto), (coma) e (exponente) y E (exponente)
Entonces, su ejemplo de código no se está multiplicando, pero está eliminando el punto decimal.
Solución :
FILTER_FLAG_ALLOW_FRACTION
establecer la opción FILTER_FLAG_ALLOW_FRACTION
en su llamada de función para permitir el punto decimal:
$quantity = filter_input(INPUT_GET, ''quantity'', FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
Alternativamente, use FILTER_VALIDATE_FLOAT
, con una nota de retroalimentación rápida si no coincide:
$quantity = (filter_input(INPUT_GET, ''quantity'', FILTER_VALIDATE_FLOAT))
?filter_input(INPUT_GET, ''quantity'', FILTER_VALIDATE_FLOAT):
"Invalid Decimal Number";
print_r($quantity);
Prueba esto...
$quantity = filter_input(
INPUT_GET,
''quantity'',
FILTER_SANITIZE_NUMBER_FLOAT,
FILTER_FLAG_ALLOW_FRACTION
);
CodePad .
Usted quiere:
$quantity = filter_var(100.25, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
print_r($quantity);
Woops ... Querrá seguir usando filter_input
como lo tiene actualmente, así como los mismos dos primeros argumentos. Terminé usando filter_var
para poder probarlo en el teclado y olvidé cambiarlo de nuevo: P