Wenn Sie eine numerische Operation auf $num
wird sie zu einer Gleitkommazahl. 1e-06
y 0.000001
sind textuelle Repräsentationen dieser Zahl; der gespeicherte Wert unterscheidet nicht zwischen ihnen.
Wenn Sie die Zahl einfach ausdrucken oder aneinanderreihen, wird ein Standardformat verwendet, das, wie Sie gesehen haben, zu folgenden Ergebnissen führt "1e-06"
. Verwendung von sprintf
mit einem Format von "%f"
wird Ihnen ein vernünftiges Ergebnis liefern; sprintf("%f", $num)
produce "0.000001"
.
Aber die "%f"
Format können Informationen verloren gehen. Zum Beispiel:
$num = "0.00000001";
printf("%f\n", $num);
Drucke:
0.000000
Sie sagen, dass Sie drucken möchten, ohne jedes Mal bestimmen zu müssen, wie viele Stellen nach dem Dezimalpunkt angezeigt werden sollen. Etwas muss diese Entscheidung treffen, und es gibt keine allgemeingültige Methode, dies zu tun. Es liegt nahe, nur die signifikanten Ziffern auszudrucken und die Nullen am Ende wegzulassen, aber das wirft einige Probleme auf. Wie viele Ziffern drucken Sie für 1.0/3.0
, dessen Dezimaldarstellung eine unendliche Folge von 3
s? Und 0.00000001
kann nicht exakt in binärer Fließkommadarstellung dargestellt werden:
$num = "0.00000001";
printf("%f\n", $num);
printf("%.78f\n", $num);
Drucke:
0.000000
0.000000010000000000000000209225608301284726753266340892878361046314239501953125