Mein eigentliches Problem, das mich auf diese Umwandlung führt ist
folgendes: Ich habe eine Dezimalzahl als Struktur gespeichert mit n
Stellen.
1 | enum sign{POSITVE, NEGATIVE};
|
2 | typedef enum sign Vorzeichen;
|
3 |
|
4 | struct dezimalzahl{
|
5 | Vorzeichen vorzeichen;
|
6 | long stellen[25];
|
7 | long posKomma; };
|
8 | typedef struct dezimalzahl Number;
|
In den Stellen stehen immer nur Zahlen, und posKomma sagt mir wo das
Komma angezeigt wird bei Ausgabe. Meine Ausgabe lautet nun,
herauszufinden, ob beispielsweise eine Zahl 4.5874546123154 welche ja
eigentlich so aussieht:
45874546123154
posKomma = 1
vorzeichen = POSITIVE
in ein double konvertiert werden kann, also ob der Wertebereich
ausreicht oder nicht. Wenn ja, dann gut, ansonsten Fehler.
Dazu wollte ich mithilfe von Strings machen indem ich zuerst alle Longs
(Stellen) in geeignete Chars umwandle. Dazwischen füge ich dann das
Komma als . und dann im zweiten Schritt mittels sscanf das char-Array in
ein double mit 25 Stellen zu konvertieren.
Also bis jetzt habe ich :
stellen = (4,5,8,7,4,5,4,6,1,2,3,1,5,4)
posKomma = 1
char-Array = "4.5874546123154"
double = 4.5874546123154
Dann wandle ich das double wieder in ein char-Array um und vergleiche
alle Stellen mit dem originalen Char-Array. Wenn alle stimmen, dann muss
die Konvertierung funktioniert haben. Wenn einige abweichen, dann war
die Zahl zu groß.
Jetzt habe ich aber noch eine Frage: Was passiert eigentlich wenn ich
schreibe: printf("%.50lf", double_var); wirklich?
Kann meine Methode funktionieren?