round mit tausenderstelle
stefan
- javascript
Hallo zusammen,
kann mir jemand sagen wie ich an alle Tausenderstellen in dieser Funktion noch ein Punkt setzen kann ?
Beispiel:
100.000.000,45
function kaufm_round(x) {
var komma = (Math.round(x * 100) / 100).toString();
komma += (komma.indexOf('.') == -1)? '.00' : '00';
var punkt = komma.indexOf('.');
return komma.substring(0, punkt) + ',' + komma.substring(punkt+1, punkt+3);
}
Ich habe natürlich schon selbst gebastelt aber es geht noch nicht so ganz. Nur es funktioniert noch nicht ganz :-(
function kaufm_round(x, t) {
var komma = (Math.round(x * 100) / 100).toString();
komma += (komma.indexOf('.') == -1)? '.00' : '00';
var punkt = komma.indexOf('.');
var integer = (x > 0 ?
Math.floor (x) : Math.abs (Math.ceil (x))).toString ();
for (i = integer.length - 3; i > 0; i -= 3)
integer = integer.substring (0 , i) + '.' + integer.substring (i);
komma = komma.substring(0, punkt) + t + komma.substring(punkt+1, punkt+3);
return komma + integer;
}
Kann mir jemand sagen, was ich hier noch falsch mache?
Gruß
Stefan
Hello out there!
kann mir jemand sagen wie ich an alle Tausenderstellen in dieser Funktion noch ein Punkt setzen kann ?
Tausendertrennzeichen ließen sich recht einfach mit <http://de.selfhtml.org/javascript/objekte/regexp.htm#test@title=regulären Ausdrücken> erzeugen:
while (foo.[ref:self811;javascript/objekte/string.htm#search@title=search](/\d{4}/) != -1) // solange noch 4 Ziffern aufeinander folgen
foo = foo.[ref:self811;javascript/objekte/string.htm#replace@title=replace](/(\d+)(\d{3})/, "$1.$2"); // setze vor die letzen drei einen Punkt
See ya up the road,
Gunnar
Hallo,
zuerst einmal vielen Dank für Deinen Hilfetipp.
Ich habe es nun folgendermaßen versucht
function kaufm_round(x) {
var komma = (Math.round(x * 100) / 100).toString();
komma += (komma.indexOf('.') == -1)? '.00' : '00';
var punkt = komma.indexOf('.');
while (x.search(/\d{4}/) != -1) // solange noch 4 Ziffern aufeinander folgen
x = x.replace(/(\d+)(\d{3})/, "$1.$2"); // setze vor die letzen drei einen Punkt
return komma.substring(0, punkt) + ',' + komma.substring(punkt+1, punkt+3);
}
aber ich bekomme nun gesagt das das Objekt bzw. Methode nicht benutzt werden kann.
Mach ich hier noch was falsch?
Gruß
Stefan
hi,
while (x.search(/\d{4}/) != -1) // solange noch 4 Ziffern aufeinander folgen
x = x.replace(/(\d+)(\d{3})/, "$1.$2"); // setze vor die letzen drei einen Punktaber ich bekomme nun gesagt das das Objekt bzw. Methode nicht benutzt werden kann.
x ist doch die Zahl(?), die du an die Funktion übergibst.
Du möchtest die Methoden aber auf das String-Objekt, welches du dir selber erzeugt hast, anwenden.
gruß,
wahsaga
also x ist die Zahl die mir eine DB übergibt.
z.B.
x= 34511.1223332
und daraus will ich nun 34.511,12 machen also dezimal 2 Stellen runden und dann ab x.substring(0, k.indexOf('.'))abzüglich min 3 jeweils einen Punkt setzten.
Ich bin eigentlich kein großer JS-Freak und habe deswegen Probs.
Warum muss ich diese Zeichenfolge eigentlich zum string machen.
Also ich habe es nun in zwei Functionen geschrieben und Danke Euch alle, da es nun funktioniert.
Lösung:
function kaufm_round(x)
{
var komma = (Math.round(x * 100) / 100).toString();
komma += (komma.indexOf('.') == -1)? '.00' : '00';
var punkt = komma.indexOf('.');
return komma.substring(0, punkt) + ',' + komma.substring(punkt+1, punkt+3);
}
function tausend(x)
{
var t = x;
while (t.search(/\d{4}/) != -1) // solange noch 4 Ziffern aufeinander folgen
{
t = t.replace(/(\d+)(\d{3})/, "$1.$2"); // setze vor die letzen drei einen Punkt
}
return t;
}
// Ausgabe:
var ausgabe = tausend(kaufm_round(x));
Hi !
Hast Du auch kapiert, WARUM es funktioniert?
Gruß
Hans
Hello out there!
var komma = (Math.round(x * 100) / 100).toString();
Du willst doch die Zahl als String weiterverarbeiten, also
warum teilst du wieder durch 100?
komma += (komma.indexOf('.') == -1)? '.00' : '00';
Wenn du nicht durch 100 teilst, kannst du dir diese Abfrage sparen und das Dezimaltrennzeichen immer setzen.
while (x.search(/\d{4}/) != -1) // solange noch 4 Ziffern aufeinander folgen
x = x.replace(/(\d+)(\d{3})/, "$1.$2"); // setze vor die letzen drei einen Punkt
Die ist aber klar, dass Zeichenverarbeitung nur bei Zeichenketten funktioniert? In welcher Variablen hast du deinen String?
See ya up the road,
Gunnar
Hi !
while (x.search(/\d{4}/) != -1) // solange noch 4 Ziffern aufeinander folgen
x = x.replace(/(\d+)(\d{3})/, "$1.$2"); // setze vor die letzen drei einen Punkt
Oje, da hat wohl jemand noch nie etwas mit RegExp gemacht.
Also, Gunnars Lösung ist so:
search:
\d ist eine Ziffer
\d{4} sind also vier aufeinanderfolgende Ziffern (z.B. 1234)
Und solange die Suche nach vier aufeinanderfolgende Ziffern nicht -1 ist, es also noch 4 aufeinanderfolgende Ziffern gibt, dann
replace:
\d+ sagt mindestens eine Ziffer
(\d+) speichere die mindestens eine Ziffer in der entsprechenden Variablen. Da es das erste "Speichern" ist, also in $1
(\d{3}) speichere nun zu den mind. einen Ziffer aufeinanderfolgende 3 Ziffern in Variable, na, welcher? Richtig, $2
Und danach schreibe $1.$2, also die vielen Zifferm + "." + die letzten drei aufeinanderfolgenden Ziffern.
Beisp.:
1234 -> 4 Ziffern -> $1 = "1", $2 = "234", -> "1"."234" -> "1.234"
So, hoffe, das macht Sinn, was ich da geschrieben habe. ;-)
Gruß
Hans