C# Große Zahlen ganz anzeigen lassen

Dabei seit
Sep. 2016
Beiträge
1.134
#1
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
 

the_nobs

Lt. Commander
Dabei seit
März 2009
Beiträge
1.918
#2
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
 

NeoExacun

Lt. Junior Grade
Dabei seit
Apr. 2015
Beiträge
326
#3
Mit welchem Datentypen rechnest du? Denn bei Double kannst du dir das sparen. Arg viel mehr Präzision ist da nicht drin.
 
Dabei seit
März 2009
Beiträge
147
#7
Code:
string mystring = "3,24044069993519E-14";
decimal dec = Decimal.Parse(mystring, System.Globalization.NumberStyles.Float);
Console.WriteLine(dec.ToString());
Ergibt 0,0000000000000324044069993519.
 

MarshallMathers

Lt. Commander
Ersteller dieses Themas
Dabei seit
Sep. 2016
Beiträge
1.134
#8
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:
Dabei seit
März 2009
Beiträge
147
#9
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.
 

MarshallMathers

Lt. Commander
Ersteller dieses Themas
Dabei seit
Sep. 2016
Beiträge
1.134
#10
Danke, das hat gut geklappt. :)
 

MarshallMathers

Lt. Commander
Ersteller dieses Themas
Dabei seit
Sep. 2016
Beiträge
1.134
#13
Ah ja, und warum ist es keine Lösung? Ein klein wenig mehr auf das Problem einzugehen bringt dich bestimmt nicht um.
 

The Ripper

Lt. Commander
Dabei seit
Juni 2012
Beiträge
1.964
#14
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...
 

Ocram1992

Lt. Junior Grade
Dabei seit
Mai 2010
Beiträge
466
#15
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.
 

Nolag

Lt. Junior Grade
Dabei seit
Nov. 2015
Beiträge
446
#16
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.
 
Dabei seit
Jan. 2018
Beiträge
133
#17
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?
 

the_nobs

Lt. Commander
Dabei seit
März 2009
Beiträge
1.918
#19
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)

:)
 

Nolag

Lt. Junior Grade
Dabei seit
Nov. 2015
Beiträge
446
#20
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.
 
Top