números de PHP dar salida en forma exponencial
-
08-10-2019 - |
Pregunta
Cuando estoy dar salida a algunos de mis variables de dobles que están siendo escrito en forma exponencial usando fwrite. ¿Puedo configurar algunos valores por defecto en PHP, donde cada vez que se visualiza una variable (copiado o almacenado) ocurre siempre en formato decimal?
Para ser precisos el problema se produce cuando se utiliza el método json_decode en una cadena JSON que contiene un valor doble (que no está en forma exponencial). Ese valor doble después de convertir un objeto se vuelve exponencial.
Solución
Suponiendo que los números son todavía flota cuando se está escribiendo (en contraposición a las cadenas), esta es una manera de hacerlo:
echo rtrim(sprintf("%0.15f", $x), "0.");
No estoy seguro si hay una forma más limpia o no. Pero básicamente utiliza este sprintf
para imprimir un máximo de 15 cifras decimales, y luego corta la 0
cualquier .
o caracteres que se arrastran. (Por supuesto, no hay garantía de que todo va a ser redondeado bien con ceros como se podría esperar.)
Si lo que desea es un tamaño fijo, a continuación, se puede ajustar el 15
y retire la rtrim
.
Otros consejos
He tenido un problema similar donde json_decode
estaba convirtiendo Emprendedores / pío identificaciones en números exponenciales.
Lo resuelto por la precisión subiendo flotador de PHP, que se puede hacer un diferentes pocas maneras ...
- encontrar el valor
precision
en su php.ini y el cambio aprecision = 20
- añadir
ini_set('precision', 20);
a su aplicación PHP - añadir a
php_value precision 20
.htaccess de tu aplicación o archivo de host virtual
De lo contrario, si usted está muy bien con tener su BIGINT
convierte en una cadena y tiene PHP 5.3+ también puede pasar una bandera para json_decode
así: json_decode($json, true, 512, JSON_BIGINT_AS_STRING)