Wie viele Kommastellen hat eine Zahl?
-
Ich muss von einer beliebigen Dezimalzahl (z.B. 3.71929182112812812192) herausfinden wie viele Kommastellen eine Zahl. Also d.h. mit Modulo und Divisionen.
Weiß zufällig jemand wie man das macht?
Mfg Fat Tony
-
deklariere die Zahl als String, lösche alles vor dem Kommazeichen inklusive diesem weg und dann kannst du dir einfach die Länge des neuen Strings suchen.
-
double zahl;int ct=0; while(zahl!=0) { zahl*=10; zahl-=(int)zahl; ++ct; if(ct<0)break;//overflow }
Aber wundere dich nicht, wenn du in eine Endlosschleife läufst - einige Zahlen (z.B Π oder 1/3) haben unendlich viele Stellen.
-
CStoll schrieb:
einige Zahlen (z.B Π oder 1/3) haben unendlich viele Stellen.
Und wie schaffst du es, die in ein double zu speichern?
Bye, TGGC (Demo or Die)
-
TGGC schrieb:
CStoll schrieb:
einige Zahlen (z.B Π oder 1/3) haben unendlich viele Stellen.
Und wie schaffst du es, die in ein double zu speichern?
Bye, TGGC (Demo or Die)
Jetzt weißt du, wozu man 1 GiB RAM braucht.
-
Danke! Diese Lösung hatte ich auch schon, allerdings funktioniert das nicht. Zumindest nicht in Java.
Weil in Java 0.3 == 0.2999999999...7 ist.
Hätte wohl gleich im Java Forum um Hilfe bitten müssen.
Trotzdem danke!
Mfg Fat-J
-
Das hat nichts mit Java zu tun.
-
Ich weiß! Das hat was mit was mit dem Binärsystem zu tun. weil z.B.
double zahl = 0.001; if (zahl*3 == 0.003) ...
Diese Bedingung wäre falsch, weil 0.001 binär eine periodische Zahl ist und somit der verglich im klartext so lauten würde
if (0.002999.....716 == 0.003)
Was soll ich jetzt machen?
-
Fat-J schrieb:
Hätte wohl gleich im Java Forum um Hilfe bitten müssen.
Das habe ich nur geschrieben, weil ich gedacht habe, dass es doch sicherlich eine andere Lösung geben muss.
-
Fat-J schrieb:
Was soll ich jetzt machen?
runden.
Bye, HTTP.
-
Brummm schrieb:
TGGC schrieb:
CStoll schrieb:
einige Zahlen (z.B Π oder 1/3) haben unendlich viele Stellen.
Und wie schaffst du es, die in ein double zu speichern?
Bye, TGGC (Demo or Die)
Jetzt weißt du, wozu man 1 GiB RAM braucht.
Und wozu brauchst du ein GiB RAM, wenn ein double ohnehin nur eine länge von 8byte hat?
-
Ab 0.5 rundet er auf? Wann will ich auf wann will ich abrunden? Soll ich mit Math.ceil immer aufrunden? oder ...
Funzt normalerweise nicht.
-- Fat-J
-
Fat-J schrieb:
Ab 0.5 rundet er auf? Wann will ich auf wann will ich abrunden? Soll ich mit Math.ceil immer aufrunden? oder ...
Funzt normalerweise nicht.
-- Fat-J
du kannst prüfen ob:
|a-b| < epsilon,wobei epsilon mehr oder weniger klein ist. wie dus brauchst.
-
Du kannst ja auch BCDs verwenden.
-
Was ist epsilon?
Was sind BCDs?-- Fat-J
-
Epsilon ist die kleinstmögliche Zahl, die von einem float dargestellt werden kann.
BCD steht für Binary Coded Decimals. Dabei werden Zahlen im Dezimalformat (eine Ziffer kann Werte von 0 bis 9 annehmen) gespeichert und jeweils 4 Bit pro Ziffer verwendet. x86 Prozessoren haben sogar Instructions für BCDs eingebaut, weil sie in einigen mathematischen Anwendungen verwendet werden. Manche Taschenrechner verwenden afaik auch BCDs.
-