Fließkommazahlen in Strings verwandeln
feng
- javascript
Hallo,
ich habe ein problem bei einem skript. und zwar schreibe ich gerade etwas kleines für ein forum. in diesem forum gibt es globale variablen z.b. user_hits, user_postings, created_topics und so weiter.
das problem ist allerdings, dass ich die zahlen in folgendem format bekomme: ###.###
eine 3123 wird also als 3.123 dargestellt, was in JS nun als 3 "komma" 123 interpretiert wird. in diesem fall konnte ich das problem lösen, indem ich 3.123 in einen string umgewandelt und mit replace den . rausgelöscht habe.
nun gibt es da aber eine kleine aber feine randbedingung. bei zahlen im vierstelligen bereich, die auf 0 enden, funktioniert das alles nicht.
z.b. 3.100 also dreitausend einhundert
hier werden bei der stringumwandlung die letzten beiden nullen rausgelöscht, so dass im ergebnis nicht 3.100 sondern 3.1 steht (da bei fließkommazahlen nullen am ende ja keinen sinn machen).
hat irgendwer ne idee, wie ich dieses problem kurz und simpel lösen kann? gibt es eine funktion, die den inhalt ausnahmslos in einen string wandelt, ohne da irgendwelche formatierungen vorzunehmen?
habe schon versucht mit toPrecision() und length zu arbeiten, was leider nicht funktioniert, da length nur auf strings funktioniert, wo wir wieder bei den fehlenden nullen wären.
danke für eure hilfe
Hallo,
Hi
ich habe ein problem bei einem skript. und zwar schreibe ich gerade etwas kleines für ein forum. in diesem forum gibt es globale variablen z.b. user_hits, user_postings, created_topics und so weiter.
das problem ist allerdings, dass ich die zahlen in folgendem format bekomme: ###.###
eine 3123 wird also als 3.123 dargestellt, was in JS nun als 3 "komma" 123 interpretiert wird. in diesem fall konnte ich das problem lösen, indem ich 3.123 in einen string umgewandelt und mit replace den . rausgelöscht habe.
Wenn du die Zahlen exakt als ###.### bekommst, dann multipliziere sie doch einfach mit 1000, und schon werden die 0en bei der Umwandlung in einen String nicht mehr gelöscht.
Gruß, Volker
Wenn du die Zahlen exakt als ###.### bekommst, dann multipliziere sie doch einfach mit 1000, und schon werden die 0en bei der Umwandlung in einen String nicht mehr gelöscht.
Gruß, Volker
das habe ich vorher auch so gemacht. aber mir erschien die methode etwas umständlich. da ich überprüfen muss, ob die zahl nicht <1000 ist. außerdem wollte ich eine funktion, welche bei allen zahlen funktioniert. also auch bei millionen und milliarden.
Hi,
das habe ich vorher auch so gemacht. aber mir erschien die methode etwas umständlich. da ich überprüfen muss, ob die zahl nicht <1000 ist.
nein, ob sie einen Punkt enthält.
außerdem wollte ich eine funktion, welche bei allen zahlen funktioniert. also auch bei millionen und milliarden.
Das wird dann garantiert als String übermittelt - der ganz sicher auch die abschließenden Nullen hat (falls der Wert entsprechend ist). Warum bekommst Du die Werte in unterschiedlichen Typen?
Und, nebenbei gefragt: Warum bestehst Du auf eine Funktion? Erweitere doch die verschiedenen Objekt-Typen um eine .toNumericValue()-Methode oder so.
Cheatah
Hallo feng,
wenn Du sicher sein kannst, dass der "." immer das Tausendertrennzeichen ist, ersetze ihn einfach durch nichts (http://de.selfhtml.org/javascript/objekte/string.htm#replace).
Gruß, Jürgen
Hallo feng,
wenn Du sicher sein kannst, dass der "." immer das Tausendertrennzeichen ist, ersetze ihn einfach durch nichts (http://de.selfhtml.org/javascript/objekte/string.htm#replace).
Gruß, Jürgen
das habe ich ja. aber das ist auch nicht das problem :)
sondern die umwandlung von float/int in einen string ist das problem, da ich replace nur auf strings anwenden kann.
Hi,
hat irgendwer ne idee, wie ich dieses problem kurz und simpel lösen kann? gibt es eine funktion, die den inhalt ausnahmslos in einen string wandelt, ohne da irgendwelche formatierungen vorzunehmen?
Für aktuelle Browser: toFixed() -> num.toFixed(3).toString().replace(".",""); (ungetestet)
Ansonsten enthält Coding: Number-Library enthält Funktionen, um Zahlen formatiert darzustellen (sie sind dann per se Strings) -> result=dez(num,3).replace(".","");
Gruß, Cybaer
Für aktuelle Browser: toFixed() -> num.toFixed(3).toString().replace(".",""); (ungetestet)
der befehl scheint zu funktionieren. mit einer einzigen ausnahme:
z.b. bei 1.000 (tausend) macht er 1000. also alles wunderbar.
bei 999 macht er aber 999000. aber das werde ich wohl durch ne if abfrage lösen können.
dann noch ne andere sache. ich bekomme zum teil zahlen, die schon bald in die millionen gehen. ich weiß jetzt nicht, wie die formatiert werden, aber ich gehe mal davon aus, dass es dann z.b. so aussieht: 2.432.223
da gibt JS dann endgültig den geist auf, weil er damit als zahl überhaupt nix anfangen kann (zumindest bei meinen lokalen beispielen). aber das muss ich wohl testen, wenns im forum so weit ist. vielleicht interpretiert JS dann die zahl automatisch als string.
aber gibt es in JS eigentlich keine "cast" methode (wie in c++), mit der ich einfach die datentyp ändern kann? oder besser: gibt es keine funktion, die JS dazu zwingt die erhaltene variable als string zu speichern und nicht als float oder int?
hi,
aber gibt es in JS eigentlich keine "cast" methode (wie in c++), mit der ich einfach die datentyp ändern kann?
Es gibt String(), Number() als explizite Objekte, es gibt Methoden wie Number.toString().
oder besser: gibt es keine funktion, die JS dazu zwingt die erhaltene variable als string zu speichern und nicht als float oder int?
Das kommt erst mal darauf an, wie die Variable denn überhaupt "erhalten" wird.
gruß,
wahsaga
aber gibt es in JS eigentlich keine "cast" methode (wie in c++), mit der ich einfach die datentyp ändern kann? oder besser: gibt es keine funktion, die JS dazu zwingt die erhaltene variable als string zu speichern und nicht als float oder int?
Nein, JS wandelt den Typ immer so um wie es ihn braucht. Wie gesagt wäre es nicht sinnvoller die Zahlen so zu übergeben wie du sie verwenden willst?
Serverseitige Sprachen haben da mehr Möglichkeiten als JS.
Struppi.
Hi,
vielleicht interpretiert JS dann die zahl automatisch als string.
Davo ist auszugehen.
aber gibt es in JS eigentlich keine "cast" methode (wie in c++), mit der ich einfach die datentyp ändern kann?
Weil sie nicht gebraucht wird. JS typisiert automatisch. Und wenn man einen bestimmten Typ braucht, dann wandelt man eben (z.B. ergibt ""+int immer einen String, und ein 1*string immer eine zahl).
die JS dazu zwingt die erhaltene variable als string zu speichern
Das genannte toString() - aber dein Problem ist ein anderes.
Gruß, Cybaer
ich habe ein problem bei einem skript. und zwar schreibe ich gerade etwas kleines für ein forum. in diesem forum gibt es globale variablen z.b. user_hits, user_postings, created_topics und so weiter.
das problem ist allerdings, dass ich die zahlen in folgendem format bekomme: ###.###
Kannst du die Zahlen nicht so "bekommen" dass du sie in JS einsetzen kannnst ohne irgendwelche Verrenkungen?
Struppi.
ich habe ein problem bei einem skript. und zwar schreibe ich gerade etwas kleines für ein forum. in diesem forum gibt es globale variablen z.b. user_hits, user_postings, created_topics und so weiter.
das problem ist allerdings, dass ich die zahlen in folgendem format bekomme: ###.###
Kannst du die Zahlen nicht so "bekommen" dass du sie in JS einsetzen kannnst ohne irgendwelche Verrenkungen?
Struppi.
die idee hatte ich auch schon. aber gerade eben erst, konnte ich mir selber die templates und die referenzen dazu ansehen. und sieh da:
es gibt ein prefix, den man vor die forenvariablen setzen kann, damit die unformatiert ausgegeben werden :)
an alle nochmal tausend dank, die geholfen haben. das problem sollte jetzt gelöst sein.