Wie kann ich drucken Sie eine große Anzahl in Lua ohne wissenschaftlicher notation dargestellt?
Ich bin den Umgang mit Zeitstempeln in Lua zeigt die Anzahl der Mikrosekunden, die seit der Epoche (z.B. "1247687475123456").
Ich würde wirklich gerne in der Lage sein zu drucken, die Anzahl der in all seinen schrecklichen Herrlichkeit, aber Lua besteht auf drucken in der wissenschaftlichen notation. Ich habe abgekocht die verfügbaren Dokumentation zum drucken eines formatierten string, aber die einzige verfügbare Befehle "Drucken" in der wissenschaftlichen notation (%e/%E)" und "drucken Automatisch in wissenschaftlicher notation, wenn die Zahl ist sehr lang (%g)". Keine Optionen scheinen verfügbar zu sein, um drucken Sie die Nummer in seine normale form.
Merke ich, dass ich könnte eine Funktion schreiben, die die ursprüngliche Zahl, einige teilen durch 10, und drucken Sie die Ziffern in einer Schleife, aber das scheint wie ein unelegant ärger. Sicherlich gibt es einige Wege, dies zu tun, das ist gebaut, um die Sprache?
- In Verbindung mit anderen Sprachen: Haskell Lua C++ ostreams Delphi
Du musst angemeldet sein, um einen Kommentar abzugeben.
1247687475123456
"%.0f"
aber ein wenig kürzerLua-wie in der Regel konfiguriert, verwendet Ihre Plattform üblichen double-precision-floating-point-format zum speichern von ganzen zahlen. Für die meisten desktop-Plattformen heute, dass die 64-bit-IEEE-754-format. Die konventionelle Weisheit ist, dass Ganzzahlen im Bereich von 1E15 bis +1E15 kann sicher angenommen werden, um exakt dargestellt werden.
In jedem Fall, die
- string.format()
Funktion übergibt seine Argumente durch (mit einigen geringfügigen Verbesserungen) an der Plattform ist die Implementierung vonprintf()
. Der format-string wird verstanden durchprintf()
umfasst%e
und%E
zu zwingen "wissenschaftliche" notation, und%f
zu zwingen Ebene dezimal-notation. Darüber hinaus%g
und%G
wählen Sie die kürzest mögliche Schreibweise.Beispiel:
Beachten Sie, dass wenn der Wert passt in eine 32-bit signed integer-Bereich, Sie können auch die
%d
- format. Die Ergebnisse sind jedoch nicht gut definiert, wenn der Wert übersteigt das Angebot. System-Zeitstempel in Mikrosekunden werden voraussichtlich überschreiten der 32-bit-Bereich.Wenn 16 Dezimalstellen ist nicht genug Präzision, gibt es mehrere Möglichkeiten für eine erhöhte Präzision.
Zuerst, es würde nicht schwierig sein, zu Paket eine echte 64-bit-Ganzzahl in eine
userdata
zusammen mit einem passenden Satz von arithmetischen metamethods. Dies diskutiert wird gelegentlich auf die Lua-mailing-Liste, aber ich erinnere mich nicht sehen ein abgeschlossenes Modul veröffentlicht von jedermann.Zweite, eine von der Lua Autoren veröffentlicht hat, zwei Module Unterstützung beliebiger Genauigkeit arithmetische: lbc und lmapm. Beides gefunden auf dieser Seite.
Dritte, casual die Suche in Google leicht dreht, bis einige andere math-library-Wrapper.