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.
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 ..
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.
Mit sscanf()
nach long double konvertieren, dann sprintf()
verwenden, um es als String mit dem wissenschaftlichen Formatierer wieder auszugeben:
Nicht sicher, ob sogar long double
Ihnen tatsächlich 12 signifikante Ziffern gibt. Auf meinem System generiert dies "4.79425538604e-01"
.
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.