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.


Log in to reply