¿Por qué PHP imprime mi número en notación científica cuando lo especifiqué como .000021?
En PHP tengo el siguiente código:
<?PHP
$var = .000021;
echo $var;
?>
¡La salida es 2.1E-5!
¿Por qué? debería imprimir .000021
Utilice number_format() para obtener lo que busca:
print number_format($var, 5);
También verifique sprintf()
2.1E-5 es el mismo número que 0.000021. Así es como imprime números por debajo de 0,001. Utilice printf() si lo desea en un formato particular.
Editar Si no está familiarizado con la 2.1E-5
sintaxis, debe saber que es una abreviatura de 2.1×10 -5 . Así es como la mayoría de los lenguajes de programación representan números en notación científica.
Para mostrar un número de hasta 8 espacios decimales, sin ceros adicionales a la derecha (como lo hace number_format, lo cual puede resultar molesto), use esto:
echo rtrim(rtrim(sprintf('%.8F', $var), '0'), ".");
En general, un número es un número, no una cadena, y esto significa que cualquier lenguaje de programación trata un número como un número. Por lo tanto, el número por sí solo no implica ningún formato específico (como usar .000021
en lugar de 2.1e-5
). Esto no es nada diferente a mostrar un número con ceros a la izquierda (como 0.000021
) o alinear listas de números. Este es un problema general que encontrarás en cualquier lenguaje de programación: si quieres un formato específico debes especificarlo usando las funciones de formato de tu lenguaje de programación.
A menos que especifique el número como cadena y lo convierta a un número real cuando sea necesario, por supuesto. Algunos idiomas pueden hacer esto implícitamente.
Las respuestas anteriores respondieron a la pregunta de OP, pero ninguna ofreció el código para hacerlo.
Utilice esta función para formatear cualquier número con formato E.
function format_amount_with_no_e($amount) {
$amount = (string)$amount; // cast the number in string
$pos = stripos($amount, 'E-'); // get the E- position
$there_is_e = $pos !== false; // E- is found
if ($there_is_e) {
$decimals = intval(substr($amount, $pos + 2, strlen($amount))); // extract the decimals
$amount = number_format($amount, $decimals, '.', ','); // format the number without E-
}
return $amount;
}
Tenga en cuenta que la función siempre devolverá una cadena.