PHP-Ausgabenummern in Exponentialform
-
08-10-2019 - |
Frage
Wenn ich einige meiner doppelten Variablen ausgibt sie in exponentieller Form geschrieben werden Fwrite verwenden. Kann ich einige Standardwerte in PHP, wo, wenn eine Variable (kopiert oder gespeichert) passiert es immer im Dezimalformat angezeigt wird?
Um genau zu sein, wenn das Problem auftritt, das i json_decode Methode auf einem json Zeichenfolge verwendet werden, die einen doppelten Wert enthält (die nicht in exponentieller Form ist). Der Double-Wert nach einer Umwandlung ein Objekt wird exponentiell.
Lösung
Unter der Annahme sind die Zahlen immer noch schwimmt, wenn geschrieben wird (im Gegensatz zu Strings gegen), ist dies eine Möglichkeit, es zu tun:
echo rtrim(sprintf("%0.15f", $x), "0.");
Ich bin mir nicht sicher, ob es ein sauberer Weg ist oder nicht. Aber im Grunde sprintf
Diese nutzt maximal 15 Dezimalstellen zu drucken, und dann trimmt weg alle nachgestellten 0
oder .
Zeichen. (Natürlich gibt es keine Garantie, dass alles schön abgerundet wird mit Nullen wie man erwarten könnte.)
Wenn Sie nur eine feste Größe wünschen, dann können Sie die 15
einzustellen und die rtrim
entfernen.
Andere Tipps
Ich hatte ein ähnliches Problem, wo json_decode
kürzlich wurde die Umwandlung twitter / tweet IDs in exponentielle Zahlen.
Ich löste es durch PHP float Präzision Upping, die eine andere paar Möglichkeiten getan werden kann ...
- den
precision
Wert in der php.ini finden und verändernprecision = 20
- Add
ini_set('precision', 20);
auf Ihre PHP-Anwendung - Add
php_value precision 20
zu Ihren App .htaccess oder virtueller Host-Datei
Ansonsten, wenn Sie in Ordnung Ihre BIGINT
mit mit in einen String konvertiert und Sie haben PHP 5.3+ Sie auch ein Flag zu json_decode
wie so passieren kann: json_decode($json, true, 512, JSON_BIGINT_AS_STRING)