Rundung auf zwei Stellen nach dem Komma
Verfasst: 31.01.2011, 16:34
[fontsize=2][font=arial]Hallo,
ich habe ein Problem mit der Rundung auf zwei Stellen (kaufm.). Ich habe einen Wert, der geliefert wird, einen, den der User eingibt. Daraus wird ein neuer Wert errechnet. Dieser soll immer mit zwei Stellen ausgegeben werden.
Ich hatte es so probiert:
[/font]
[/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] repl [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] UEBERZIEHUNG1.rawValue.replace(","[/fontsize][fontsize=2][fontsize=2],[/fontsize][/fontsize][fontsize=2]".") [/fontsize][fontsize=2][fontsize=2]// replace() wird benötigt, um mit Dezimalzahlen (float) rechnen zu können.
[/fontsize][/fontsize][fontsize=2]
[/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] betr [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] parseFloat(repl) [/fontsize][fontsize=2][fontsize=2]+[/fontsize][/fontsize][fontsize=2] parseFloat(Dispo.rawValue) [/fontsize][fontsize=2][fontsize=2]// der Kontosaldo, der im Feld UEBERZIEHUNG1 geliefert wird, ist negativ, der Dispo wird positiv eingegeben.
[/fontsize][/fontsize][fontsize=2]
[/fontsize][fontsize=2][fontsize=2]betr = (Math.round( betr * 100 ) / 100).toString(); //Rundung auf zwei Stellen nach dem Komma und Konvertierung in String
[/fontsize][/fontsize][fontsize=2]
[/fontsize][fontsize=2][fontsize=2]betr += (betr.indexOf('.') == -1)? '.00' : ' '; //Bei Ganzzahl Ergänzung von zwei Kommastellen
[/fontsize][/fontsize][fontsize=2]
betr [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] betr.replace("."[/fontsize][fontsize=2][fontsize=2],[/fontsize][/fontsize][fontsize=2]",") [/fontsize][fontsize=2][fontsize=2]// der Punkt wird wieder durch ein Komma ersetzt[/fontsize][/fontsize]
[font=arial][fontsize=2][fontsize=2]Das funkioniert bei ganzen Zahlen und Zahlen mit zwei Stellen nach dem Komma. Bei Zahlen mit nur einer Stelle nach dem Komma, z.B. 1234,50 wird 1234,5 ausgegeben. [/fontsize][/fontsize]
[fontsize=2][fontsize=2]Im Internet habe ich eine Lösung gefunden, die aber nicht funktioniert. Ich bin mir jetzt nicht sicher, ob das am LCD liegt, oder ob ein Fehler in der Funktion ist:[/fontsize][/fontsize]
[/font][fontsize=2][fontsize=2][fontsize=2]
[/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] repl [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] UEBERZIEHUNG1.rawValue.replace(","[/fontsize][fontsize=2][fontsize=2],[/fontsize][/fontsize][fontsize=2]".") [/fontsize][fontsize=2][fontsize=2]// replace() wird benötigt, um mit Dezimalzahlen (float) rechnen zu können.
[/fontsize][/fontsize][fontsize=2]
[/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] betr [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] parseFloat(repl) [/fontsize][fontsize=2][fontsize=2]+[/fontsize][/fontsize][fontsize=2] parseFloat(Dispo.rawValue) [/fontsize][fontsize=2][fontsize=2]// der Kontosaldo, der im Feld UEBERZIEHUNG1 geliefert wird, ist negativ, der Dispo wird positiv eingegeben.
[/fontsize][/fontsize][fontsize=2]
[/fontsize][fontsize=2][fontsize=2]function[/fontsize][/fontsize][fontsize=2] runden(betr)
{
[/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] r [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] (Math.round( betr [/fontsize][fontsize=2][fontsize=2]*[/fontsize][/fontsize][fontsize=2] 100 ) [/fontsize][fontsize=2][fontsize=2]/[/fontsize][/fontsize][fontsize=2] 100).toString();
r [/fontsize][fontsize=2][fontsize=2]+=[/fontsize][/fontsize][fontsize=2] (r.indexOf('.') [/fontsize][fontsize=2][fontsize=2]==[/fontsize][/fontsize][fontsize=2] [/fontsize][fontsize=2][fontsize=2]-[/fontsize][/fontsize][fontsize=2]1)[/fontsize][fontsize=2][fontsize=2]?[/fontsize][/fontsize][fontsize=2] '.00' [/fontsize][fontsize=2][fontsize=2]:[/fontsize][/fontsize][fontsize=2] '00';
[/fontsize][fontsize=2][fontsize=2]return[/fontsize][/fontsize][fontsize=2] r.substring(0[/fontsize][fontsize=2][fontsize=2],[/fontsize][/fontsize][fontsize=2] r.indexOf('.') [/fontsize][fontsize=2][fontsize=2]+[/fontsize][/fontsize][fontsize=2] 3);
}
[fontsize=2]
betr [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] betr.replace("."[/fontsize][fontsize=2][fontsize=2],[/fontsize][/fontsize][fontsize=2]",") [/fontsize][fontsize=2][fontsize=2]// der Punkt wird wieder durch ein Komma ersetzt[/fontsize][/fontsize]
[font=arial][fontsize=2][fontsize=2]Leider wird hier nix zurückgeliefert. Ich bin ein ziemlicher Laie in JS. Gehe ich richtig in der Annahme, dass die Funktion runden(betr) ihr return wieder in die Variable betr schreibt? Oder brauch ich da noch ein weiteres Statement?[/fontsize][/fontsize]
[fontsize=2][fontsize=2]Danke und liebe Grüße,[/fontsize][/fontsize]
[/font][fontsize=2][fontsize=2][font=arial]Nick_ko
[/font][/fontsize][/fontsize][/fontsize][/fontsize][/fontsize]
ich habe ein Problem mit der Rundung auf zwei Stellen (kaufm.). Ich habe einen Wert, der geliefert wird, einen, den der User eingibt. Daraus wird ein neuer Wert errechnet. Dieser soll immer mit zwei Stellen ausgegeben werden.
Ich hatte es so probiert:
[/font]
[/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] repl [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] UEBERZIEHUNG1.rawValue.replace(","[/fontsize][fontsize=2][fontsize=2],[/fontsize][/fontsize][fontsize=2]".") [/fontsize][fontsize=2][fontsize=2]// replace() wird benötigt, um mit Dezimalzahlen (float) rechnen zu können.
[/fontsize][/fontsize][fontsize=2]
[/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] betr [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] parseFloat(repl) [/fontsize][fontsize=2][fontsize=2]+[/fontsize][/fontsize][fontsize=2] parseFloat(Dispo.rawValue) [/fontsize][fontsize=2][fontsize=2]// der Kontosaldo, der im Feld UEBERZIEHUNG1 geliefert wird, ist negativ, der Dispo wird positiv eingegeben.
[/fontsize][/fontsize][fontsize=2]
[/fontsize][fontsize=2][fontsize=2]betr = (Math.round( betr * 100 ) / 100).toString(); //Rundung auf zwei Stellen nach dem Komma und Konvertierung in String
[/fontsize][/fontsize][fontsize=2]
[/fontsize][fontsize=2][fontsize=2]betr += (betr.indexOf('.') == -1)? '.00' : ' '; //Bei Ganzzahl Ergänzung von zwei Kommastellen
[/fontsize][/fontsize][fontsize=2]
betr [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] betr.replace("."[/fontsize][fontsize=2][fontsize=2],[/fontsize][/fontsize][fontsize=2]",") [/fontsize][fontsize=2][fontsize=2]// der Punkt wird wieder durch ein Komma ersetzt[/fontsize][/fontsize]
[font=arial][fontsize=2][fontsize=2]Das funkioniert bei ganzen Zahlen und Zahlen mit zwei Stellen nach dem Komma. Bei Zahlen mit nur einer Stelle nach dem Komma, z.B. 1234,50 wird 1234,5 ausgegeben. [/fontsize][/fontsize]
[fontsize=2][fontsize=2]Im Internet habe ich eine Lösung gefunden, die aber nicht funktioniert. Ich bin mir jetzt nicht sicher, ob das am LCD liegt, oder ob ein Fehler in der Funktion ist:[/fontsize][/fontsize]
[/font][fontsize=2][fontsize=2][fontsize=2]
[/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] repl [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] UEBERZIEHUNG1.rawValue.replace(","[/fontsize][fontsize=2][fontsize=2],[/fontsize][/fontsize][fontsize=2]".") [/fontsize][fontsize=2][fontsize=2]// replace() wird benötigt, um mit Dezimalzahlen (float) rechnen zu können.
[/fontsize][/fontsize][fontsize=2]
[/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] betr [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] parseFloat(repl) [/fontsize][fontsize=2][fontsize=2]+[/fontsize][/fontsize][fontsize=2] parseFloat(Dispo.rawValue) [/fontsize][fontsize=2][fontsize=2]// der Kontosaldo, der im Feld UEBERZIEHUNG1 geliefert wird, ist negativ, der Dispo wird positiv eingegeben.
[/fontsize][/fontsize][fontsize=2]
[/fontsize][fontsize=2][fontsize=2]function[/fontsize][/fontsize][fontsize=2] runden(betr)
{
[/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] r [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] (Math.round( betr [/fontsize][fontsize=2][fontsize=2]*[/fontsize][/fontsize][fontsize=2] 100 ) [/fontsize][fontsize=2][fontsize=2]/[/fontsize][/fontsize][fontsize=2] 100).toString();
r [/fontsize][fontsize=2][fontsize=2]+=[/fontsize][/fontsize][fontsize=2] (r.indexOf('.') [/fontsize][fontsize=2][fontsize=2]==[/fontsize][/fontsize][fontsize=2] [/fontsize][fontsize=2][fontsize=2]-[/fontsize][/fontsize][fontsize=2]1)[/fontsize][fontsize=2][fontsize=2]?[/fontsize][/fontsize][fontsize=2] '.00' [/fontsize][fontsize=2][fontsize=2]:[/fontsize][/fontsize][fontsize=2] '00';
[/fontsize][fontsize=2][fontsize=2]return[/fontsize][/fontsize][fontsize=2] r.substring(0[/fontsize][fontsize=2][fontsize=2],[/fontsize][/fontsize][fontsize=2] r.indexOf('.') [/fontsize][fontsize=2][fontsize=2]+[/fontsize][/fontsize][fontsize=2] 3);
}
[fontsize=2]
betr [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] betr.replace("."[/fontsize][fontsize=2][fontsize=2],[/fontsize][/fontsize][fontsize=2]",") [/fontsize][fontsize=2][fontsize=2]// der Punkt wird wieder durch ein Komma ersetzt[/fontsize][/fontsize]
[font=arial][fontsize=2][fontsize=2]Leider wird hier nix zurückgeliefert. Ich bin ein ziemlicher Laie in JS. Gehe ich richtig in der Annahme, dass die Funktion runden(betr) ihr return wieder in die Variable betr schreibt? Oder brauch ich da noch ein weiteres Statement?[/fontsize][/fontsize]
[fontsize=2][fontsize=2]Danke und liebe Grüße,[/fontsize][/fontsize]
[/font][fontsize=2][fontsize=2][font=arial]Nick_ko
[/font][/fontsize][/fontsize][/fontsize][/fontsize][/fontsize]