Thread Exponentielle Darstellung mit printf mit einer null vor der Dezimaltrennstelle (6 answers)
Opened by Sanny at 2010-11-11 10:37

clms
 2010-11-11 14:38
#142637 #142637
User since
2010-08-29
373 Artikel
BenutzerIn
[default_avatar]
2010-11-11T09:37:23 Sanny
Ich benutze folgende Form der printf Funktion:
Code (perl): (dl )
printf  ("%23.16e\n", $a);

Ist das übergebene Argument beispielsweise $a=-666 dann erfolgt die Ausgabe folgendermaßen:

-6.6600000000000000e+02

Mein Ziel ist, dass die Darstellung folgendermaßen aussieht:
...
-0.6660000000000000D+03

Mir fällt nur ein, die komplette Datei nochmal einzulesen und das gewünschte Format durch eine relativ aufwendige Substitution einzustellen/ erzwingen.
Hat jemand von euch eine elegantere Idee?

Ein Standard-sprintf-Format für Deinen Wunschoutput gibt es wohl nicht. (Bin da aber kein Experte und lasse mich gern eines bessren belehren.)

Den kompletten Ausgabe-File nochmal einlesen und filtern brauchst Du aber auch nicht. Es genügt doch wenn Du die Zahlendarstellung entsprechend filterst, bevor Du sie in den Output einfügst.

Ich sehe da zwei Möglichkeiten
1.) Du versuchst Dein Format in printf zu emulieren in dem Du getrennte Zahlen für Mantisse und Exponent übergibst.
2.) Du schreibst Dir eine eigene Konvertierungsfunktion, die die Zahl
in die von Dir gewünsche Darstellung bringt und deren Ergebnis Du dann als String in Deinen Output einfügst:
Code (perl): (dl )
printf("%s",my_d_format($a));

my_d_format() könnte die Zahl z.B. zunächst per sprintf("%23.16e",$a) in einen String wandeln den Du dann entsprechend umformst.
Oder dort spaltest Du die Zahl zunächst in Mantisse und Exponent auf und formatierst dies dann zum gewünschen String.

View full thread Exponentielle Darstellung mit printf mit einer null vor der Dezimaltrennstelle