Hallo Lutz!
das Verfahren versagt leider bei x=0.
genaugenommen bei allem kleiner 1.
für positive Zahlen fehlt nach:
x=x.toString(); // in String verwandlen
while(x.length<n+1) // vorne mit Nullen auf Mindestlänge auffüllen
x="0"+x;
Die Idee an dem Verfahren ist, dass nur an einer Stelle mit Floats gerechnet wird. Bei anderen Verfahren, die Teile der Zahl getrennt berechnen, kann es einen mit unterschiedlichen Rechenfehlern der Teilberechnungen erwischen.
Gruss,
Carsten
P.S:
Dein Einzeiler muss:
zahltext=parseInt(Math.round(x))+"."+String(Math.abs(Math.round(x*100))%100+100).substr(1,2);
^^^^^^^^^^
heissen, sonst geht das bei Zahlen wie 129.996 schief.
Hallo Carsten,
peinlich, peinlich ... War wohl noch ein Fehler in meiner Formel ;-(
Aber so wie es jetzt ist, geht es auch noch nicht, z. B. bei 129.896
geht das schief, da würde sonst 130.90 rauskommen. Mein nächster Tip:
zahltext=parseInt(Math.round(x*100)/100)+"."+String(Math.abs(Math.round(x*100))%100+100).substr(1,2);
Wie wäre es mit einem kleinen Wettstreit: Wer den kürzesten (Anzahl der Zeichen), fehlerfreien Code hinbekommt?
MfG. Lutz T.