C# Große Zahlen ganz anzeigen lassen

MarshallMathers

Lt. Commander
Registriert
Sep. 2016
Beiträge
1.250
Hallo,

Ich habe mir gerade, weil ich oft mit amateurhaft mit großen Zahlen in meinem zweiten Hobby, der Astronomie herumhantieren, ein Programm in C# geschrieben, mit dem ich mir bestimmte Einheiten in bestimmte anderen Einheiten umrechen lassen. Nun kommen dabei aber oft sehr große Zahlen aus, zum Beispiel, wenn ich mir anzeigen lasse, wie viele Kilometer ein Parsec lang ist. Dabei kommt dann dass raus: 3,24044069993519E-14.
Wenn ich mir aber nun optional die Zahlen auch lang ausgeschrieben ansehen will, wie mache ich das?

- Marshall
 
Das kann net sein
Dein Beispiel ist 0.000000000000032 ich glaub da ist irgendwas invers (weil das sind eher nanometer und das ist sicherlich keine gebräucliche Astronomische Einheit :)

Aber wenn du es trotzdem tun willst
Das nennt sich Fixed Point formatierung und machen kannst es über die String.Format Methoden
 
Mit welchem Datentypen rechnest du? Denn bei Double kannst du dir das sparen. Arg viel mehr Präzision ist da nicht drin.
 
Schon klar, aber wozu die letzten Stellen anzeigen, wenn die sowieso zu nichts zu gebrauchen sind.
 
Code:
string mystring = "3,24044069993519E-14";
decimal dec = Decimal.Parse(mystring, System.Globalization.NumberStyles.Float);
Console.WriteLine(dec.ToString());

Ergibt 0,0000000000000324044069993519.
 
Genau, ich möchte die Dimensionen verdeutlichen, die Präzision bei einem Double passt. Und ja, ich weiß, das da noch irgendwo Fehler sind. :D
@Sturmel
Muss ich das in einem String speichern oder kann ich das auch direkt in einem decimal speichern, und dann formatieren?
 
Zuletzt bearbeitet:
Nein, wenn´s kein String ist gehts auch einfacher:

Code:
double myDouble = 3.24044069993519E-14;
decimal myDec = (decimal)myDouble;

Console.WriteLine(myDec.ToString());

Ergibt 0,0000000000000324044069993519.
 
Danke, das hat gut geklappt. :)
 
Ah ja, und warum ist es keine Lösung? Ein klein wenig mehr auf das Problem einzugehen bringt dich bestimmt nicht um.
 
Weil genau für diesen Zweck die Überladungen existieren. Der cast ist wie von hinten durch die Brust ins Auge.

Wenn jemand den Code liest fragt der sich wsl, warum jetzt da auf decimal gecaastet wird. Im Falle der Überladung wird sofort deutlich, was man erreichen möchte.

​Nicht zuletzt ist es kürzer...
 
Als Beispiel: Ich bekomme den Code auf der Arbeit (du gibst den Code deinem Kumpel) zu sehen und soll den refaktorieren, vereinfachen oder sonstwas. Der Cast sieht für mich nutzlos aus, also nehm ich den direkt raus. Dass der Sinn dahinter ist, die Formatierung zu ändern, erschließt sich daraus nicht. Deswegen die Überladung nutzen. Die ist eindeutig.
 
Der Decimal gaukelt zudem eine Genauigkeit vor, die nicht vorhanden ist. Der elementare Rundungsfehler bei Double ist 2.2E-16, was bedeutet, dass die letzten 12 Stellen des angezeigten Wertes eh Rundungsschrott sind.
 
Wollte gerade fragen, die Zahlen, die dabei rauskommen, sind doch totaler Unsinn. Das ist fernab von jeglichen Genauigkeitsbereich von double. Das sind ja nichtmal messbare Abweichungen sondern Zufallswerte, oder?
 
UnserKapitän schrieb:
Wollte gerade fragen, die Zahlen, die dabei rauskommen, sind doch totaler Unsinn. Das ist fernab von jeglichen Genauigkeitsbereich von double. Das sind ja nichtmal messbare Abweichungen sondern Zufallswerte, oder?

double hat einen Wertebereich von ±4.9E-324

Da sind also noch ein paar stellen übrig (so ~310 das Komma nach links und ~330 das Komma nach recht zu verrücken)

:)
 
Das ist eben das heimtückische bei Fließkommazahlen. Der Wertebereich ist nur mit starken Einschränkungen nutzbar. Der mit voller Genauigkeit nutzbare Zahlenbereich endet bei 15 bis 16 Stellen. Das liegt an der nur 52 Bit großen Mantisse von Double. Daraus folgt, dass ein Wert, der durch eine Berechnung entstanden ist, und kleiner ist als 2^-(52+1) im Prinzip als 0 zu betrachten ist. Man sollte sich also bewusst sein, dass Zahlen, die nicht in die Mantisse passen mit Vorsicht zu geniessen sind und wahrscheinlich aus dem Märchenland stammen.
 
Zurück
Oben