Nachkommastellen Zählen
-
Ich habe folgende Methode geschrieben die die Nachkommastellen einer double Zahl zählt jedoch funktioniert sie nur bei max 5 Nachkommastellen danach wird weiter 5 übergeben was ich mir nicht erklären kann:
public static int Anz_Nachkomma(double zahl) { string tmp=zahl.ToString(),tmp2=""; char sep=','; foreach(string sub in tmp.Split(sep)) { tmp2=sub; } return tmp2.Length; }
Was mache ich falsch?
-
Sowas gabs schon mal auf thedailywtf, solche Sachen sollte man nicht nachbauen ;).
Es liegt einfach daran, dass die ToString-Methode ohne Parameter wohl nur maximal fünf Nachkommastellen ausspuckt. Das Zählen von Nachkommastellen bei doubles ist ein hoffnungsloses Unterfangen, weil double Basis 2 ist und deshalb einige Dezimalzahlen nicht endlich darstellbar sind, was zu starken Ungenauigkeiten und endlosen Nachkommastellen (im Dezimalen) führt.
Wofür brauchst du das eigentlich?
-
Ich schreibe an einer klasse die RAD koordinaten zur PI darstellung umrechnet also z.B. rad 1.570 --> 1/2PI
naja dann werde ich wohl runden müssen
-
Musst du eh, aber wofür hättest du da die Anzahl der Nachkommastellen gebraucht?!
-
für die umrechnung von dezimal zahlen zu brüchen
public static string DectoBrk(double dec) { int zaehler=Nachkomma(dec); int tmp=Anz_Nachkomma(dec); string tmpn="1"; for(int i=0;i<tmp;i++) tmpn+="0"; int nenner=Convert.ToInt32(tmpn); tmp=ggT(zaehler,nenner); zaehler/=tmp; nenner/=tmp; return zaehler.ToString() + "/" + nenner.ToString(); }
Wobei mir gerade einfällt das die Brüche die rauskommen nie so schön aussehen das ich sie auf dem Einheitkreis erkennen kann.
Wieder etwas für die Rubrik sinnlose Software.