In PHP Ho il codice seguente:Perché PHP sta stampando il mio numero in notazione scientifica, quando l'ho specificato come .000021?
<?PHP
$var = .000021;
echo $var;
?>
l'uscita è 2.1E-5!
Perché? dovrebbe stampare .000021
In PHP Ho il codice seguente:Perché PHP sta stampando il mio numero in notazione scientifica, quando l'ho specificato come .000021?
<?PHP
$var = .000021;
echo $var;
?>
l'uscita è 2.1E-5!
Perché? dovrebbe stampare .000021
2.1E-5 è lo stesso numero di 0.000021. Ecco come stampa numeri sotto 0.001. Utilizzare printf() se lo si desidera in un formato particolare.
Edit Se non hai familiarità con la sintassi 2.1E-5
, si dovrebbe sapere che è una scorciatoia per 2,1 × 10 -5 . È come la maggior parte dei linguaggi di programmazione rappresenta numeri in notazione scientifica.
Usa number_format() per ottenere quello che stai dopo:
print number_format($var, 5);
controllare anche sprintf()
Usa number_format o sprintf se si desidera vedere il numero come previsto.
echo sprintf('%f', $var);
echo number_format($var, 6);
In generale, un numero è un numero, non una stringa e ciò significa che qualsiasi linguaggio di programmazione considera un numero come un numero. Pertanto, il numero di per sé non implica alcun formato specifico (ad esempio l'utilizzo di .000021
anziché di 2.1e-5
). Non è niente di diverso nel visualizzare un numero con zeri iniziali (come 0.000021
) o allineare liste di numeri. Questo è un problema generale che troverai in qualsiasi linguaggio di programmazione: se vuoi un formato specifico devi specificarlo, usando le funzioni di formattazione del tuo linguaggio di programmazione.
A meno che non si specifichi il numero come stringa e lo si converta in un numero reale quando necessario, ovviamente. Alcune lingue possono farlo implicitamente.
<?php
$var = .000021;
echo $var; // 2.1E-5
echo "\n";
$var = '.000021';
echo $var; // .000021
Definire il proprio numero come una stringa per evitare l'auto-fusione, quando utilizzato in un contesto stringa (ad esempio eco)
per mostrare un numero fino a 8 spazi decimali, senza zeri in più a destra (come number_format non, che può essere fastidioso), utilizzare questo:
echo rtrim(rtrim(sprintf('%.8F', $var), '0'), ".");
ovviamente solo una buona soluzione se il numero che si sta lavorando con è spec fuori nel codice sorgente (in contrapposizione a calcolata in fase di esecuzione). .. che può o non può essere il caso nella tua situazione. –