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.

¿Fue útil?

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 a precision = 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)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top