Beste Option: Verwenden Sie den C99 hexadezimal Gleitpunktformat:
printf("%a", someDouble);
Strings auf diese Weise hergestellt wird, kann zurück in double
mit der C99 strtod()
Funktion, und auch mit den scanf()
Funktionen umgewandelt werden. Mehrere andere Sprachen unterstützen dieses Format ebenfalls. Einige Beispiele:
decimal number %a format meaning
--------------------------------------------
2.0 0x1.0p1 1.0 * 2^1
0.75 0x1.8p-1 1.5 * 2^-1
Das Hexadezimal-Format hat den Vorteil, dass alle Darstellungen sind genaue. Wenn Sie also den String wieder in Gleitkomma umwandeln, erhalten Sie immer die ursprüngliche Zahl, selbst wenn jemand den Rundungsmodus ändert, in dem die Konvertierung durchgeführt wird. Dies gilt nicht für ungenaue Formate.
Wenn Sie das hexadezimale Format aus welchem Grund auch immer nicht verwenden möchten und davon ausgehen, dass der Rundungsmodus immer rund ist (Standard), dann können Sie Ihre Daten als Dezimalzahlen formatieren mit mindestens 17 signifikanten Ziffern. Wenn Sie eine korrekt gerundete Konvertierungsroutine haben (die meisten - nicht alle - Plattformen tun dies), garantiert dies, dass Sie einen Rundlauf von Double zu String und zurück ohne Genauigkeitsverlust durchführen können.
Sprache zählt. In welcher Sprache arbeiten Sie? Es ist irgendwie unmöglich, Code mit keiner spezifischen Sprache bereitzustellen, die in dem Problem erwähnt wird. –
Ich habe die Sprache (D) nicht erwähnt, weil sie vergleichsweise selten ist, deshalb plante ich, einen in irgendeiner Sprache geschriebenen Algorithmus in D zu schreiben. –
Wie wäre es mit NaN, -0.0, inf, -inf? Die aktuelle Antwort scheint diese nicht zu berücksichtigen. –