Zeichenfolge in wissenschaftliche Notation formatieren

7

Ich habe eine Zeichenfolge, die folgendermaßen aussieht:

%Vor%

das ist ungefähr die Sünde (0,5). Ich möchte die Zeichenfolge formatieren, um viel schöner auszusehen

%Vor%

Wie kann ich das erreichen? Denken Sie daran, dass es sich um Strings handelt und nicht um Zahlen (float, double). Auch ich muss runden, um die Zahl so genau wie möglich zu halten, ich kann nicht einfach abschneiden. Wenn ich zu einem anderen Datentyp konvertieren muss, würde ich ein langes Double bevorzugen, weil ein reguläres Double nicht genug Genauigkeit hat. Ich möchte mindestens 12 Dezimalstellen vor dem Runden. Vielleicht gibt es eine einfache sprintf () Umwandlung, die ich machen könnte.

    
John Scipione 29.12.2009, 19:31
quelle

9 Antworten

8

In etwa so:

%Vor%

Ausgabe:

%Vor%     
codaddict 29.12.2009, 19:36
quelle
6

Suchen Sie nach etwas wie diesem ?

Hier ist ein Beispiel:

%Vor%

Ausgabe:

0.479425538604203005377257795772

4.79426d-01

    
coelhudo 29.12.2009 19:56
quelle
2

In sehr portablem C gibt das folgende Arbeitsbeispiel aus:

%Vor%     
wallyk 29.12.2009 19:37
quelle
2

Wenn Sie sich die Strings in Ihrer Frage ansehen, scheinen Sie Logarithmen der Basis 10 zu verwenden. In diesem Fall wäre es nicht einfach, die führenden oder abschließenden Nullen einfach zu zählen und in einen Exponenten zu setzen, indem man die Strings direkt scannt?

Vielleicht fehlt mir etwas ..

    
S.C. Madsen 29.12.2009 19:44
quelle
1

Ein IEEE 754 64-Bit-Gleitkomma (d. h. doppelte Genauigkeit) ist gut für 15 dezimale signifikante Zahlen, Sie sollten also kein Problem haben, in das Doppelte zu konvertieren. Es ist wahrscheinlicher, dass Sie das Problem bekommen, dass der Formatbezeichner alle verfügbaren Ziffern anzeigt. Aus den angeführten Beispielen scheint dies jedoch nicht zu sein.

    
Clifford 29.12.2009 19:44
quelle
1

Mit sscanf() nach long double konvertieren, dann sprintf() verwenden, um es als String mit dem wissenschaftlichen Formatierer wieder auszugeben:

%Vor%

Nicht sicher, ob sogar long double Ihnen tatsächlich 12 signifikante Ziffern gibt. Auf meinem System generiert dies "4.79425538604e-01" .

    
unwind 29.12.2009 19:38
quelle
0

Es gibt keine Standardfunktion in C oder C ++, um dies zu tun. Der normale Ansatz besteht darin, entweder in eine Zahl zu konvertieren (und dann Standardfunktionen zum Formatieren der Zahl zu verwenden) oder eine eigene benutzerdefinierte Ausgabefunktion zu schreiben.

    
anon 29.12.2009 19:33
quelle
0
%Vor%     
Sanjaya R 29.12.2009 19:38
quelle
0

Abhängig davon, wie viele Dezimalstellen Sie haben wollen (in diesem Fall 12), können Sie so etwas tun:

%Vor%

Ergebnis: ---------- Capture-Ausgabe ----------

  

"c: \ windows \ system32 \ cmd.exe" / c c: \ temp \ temp.exe   4.794255386042d-1   Beendet mit Exit-Code 0.

    
dcp 29.12.2009 19:39
quelle

Tags und Links