2010-12-04 4 views
3

Wenn ich einige meiner doppelten Variablen ausgib, werden sie mit fwrite in exponentieller Form geschrieben. Kann ich einige Standardwerte in PHP einstellen, wo immer eine Variable angezeigt (kopiert oder gespeichert) wird, immer im Dezimalformat?PHP gibt Zahlen in exponentieller Form aus

Um genau zu sein, tritt das Problem auf, wenn ich die json_decode-Methode für einen JSON-String verwende, der einen doppelten Wert enthält (der nicht in exponentieller Form ist). Dieser doppelte Wert nach der Konvertierung eines Objekts wird exponentiell.

Antwort

1

die Zahlen Unter der Annahme sind schwebt nach wie vor, 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 nicht sicher, ob es eine sauberere Art und Weise oder nicht. Aber im Grunde verwendet dies sprintf, um maximal 15 Dezimalstellen zu drucken, und entfernt dann alle nachfolgenden 0 oder . Zeichen. (Natürlich gibt es keine Garantie, dass alles schön mit abschließenden Nullen abgerundet wird, wie Sie vielleicht erwarten.)

Wenn Sie nur eine feste Größe möchten, dann können Sie die 15 anpassen und entfernen Sie die rtrim.

2

Ich hatte ein ähnliches Problem, wo json_decode letzten twitter/tweet IDs in exponentielle Zahlen umgewandelt wurde.

ich es durch upping PHP float Präzision gelöst, die eine andere paar Möglichkeiten getan werden kann ...

  • den precision Wert in der php.ini finden und es
  • -precision = 20 hinzufügen ändern ini_set('precision', 20); zu Ihre PHP-Anwendung
  • php_value precision 20 zu Ihren App .htaccess oder virtuellen Host-Datei

Andernfalls, wenn Sie in Ordnung sind mit hav hinzufügen IHRES BIGINT 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)

+0

In der Tat: '5.4.0 \t Die Optionen Parameter war added.' - so ist es 5.4+ Aber die Präzisionsding - das ist eine tolle Idee :) – LeonardChallis