¿Por qué PHP imprime mi número en notación científica cuando lo especifiqué como .000021?

Resuelto ahmed asked hace 54 años • 0 respuestas

En PHP tengo el siguiente código:

<?PHP
  $var = .000021;
  echo $var;
?>

¡La salida es 2.1E-5!

¿Por qué? debería imprimir .000021

ahmed avatar Jan 01 '70 08:01 ahmed
Aceptado

Utilice number_format() para obtener lo que busca:

print number_format($var, 5);

También verifique sprintf()

acrosman avatar Sep 24 '2009 13:09 acrosman

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-5sintaxis, 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.

Kip avatar Sep 24 '2009 13:09 Kip

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'), ".");
Joey Rich avatar Feb 08 '2016 18:02 Joey Rich

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 .000021en 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.

bluebrother avatar Sep 24 '2009 13:09 bluebrother

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.

Binar Web avatar Nov 12 '2019 10:11 Binar Web