Javascript ist Toll!

Bibliotheken > FAQ > Javascript

30. August 2005 - 10:12

Zahlen formatieren

Die folgende Funktion formatiert Zahlen.

javascript
function formatZahl(zahl, k, fix) {
    if(!k) k = 0;
    var neu = '';
 
	var dec_point = '.';
	var thousands_sep = ',';
 
    // Runden
    var f = Math.pow(10, k);
    zahl = '' + parseInt(zahl * f + (.5 * (zahl > 0 ? 1 : -1)) ) / f ;
 
    // Komma ermittlen
    var idx = zahl.indexOf('.');
 
    // fehlende Nullen einfügen
    if(fix)    {
         zahl += (idx == -1 ? '.' : '' )
         + f.toString().substring(1);
    }
	var sign = zahl < 0;
	if(sign) zahl = zahl.substring(1);
    idx = zahl.indexOf('.');
 
	// Nachkommastellen ermittlen
    if( idx == -1) idx = zahl.length;
    else neu = dec_point + zahl.substr(idx + 1, k);
 
 
    while(idx > 0)    {
        if(idx - 3 > 0)
        neu = thousands_sep + zahl.substring( idx - 3, idx) + neu;
        else
        neu = zahl.substring(0, idx) + neu;
        idx -= 3;
    }
    return (sign ? '-' : '') + neu;
}

Erläuterung

formatZahl() erwartet bis zu drei Parameter mit folgender Bedeutung:

Beispiel

Zahl:    
Stellen: 
fixieren: 



Comments (19)
11447 mal gelesen.

19 Kommentare Einen Kommentar hinterlassen »

Kommentare

1. Kommentar von Daniel Messerli
Dienstag 27.September 2005: 11:10

Hallo Struppi,

vielen Dank für deine Funktion hat sofort tadellos funktioniert.

Daniel

2. Kommentar von Tino
Mittwoch 27.September 2006: 11:20

Hallo,

die Funktion hat noch einen Fehler, wenn man Ganzzahlen eingibt und Nachkommastellen haben will (z. B. "1") - dann wird aus der 1 eine 1000 (bei 2 Nachkommastellen)!
....

3. Kommentar von Tino
Mittwoch 27.September 2006: 11:21

Das Problem tritt auf, wenn die Zahl als Zahl übergeben wird, nicht als String. ;-)

4. Kommentar von Struppi
Mittwoch 27.September 2006: 16:04

Danke ich hab's geändert.

5. Kommentar von Hubbe
Dienstag 10.Oktober 2006: 17:03

Hi,

die Funktion scheint Schwierigkeiten mit negativen Zahlen zu haben.
Beispiel mit 2 Nachkommastellen:
-1 -> -0,99
-5 -> -4,99
Beispiel mit 0 Nachkommastellen:
-1 -> 0
-2 -> -1

Gruß, Hubbe

6. Kommentar von Struppi
Dienstag 10.Oktober 2006: 19:15

Ja hatte sie, danke für den Hinweis.

7. Kommentar von Hoke
Donnerstag 9.November 2006: 16:10

Super, funktioniert einwandfrei, danke!

8. Kommentar von Kai
Montag 12.Februar 2007: 17:28

Ein klasse Skript, genau sowas hab ich gesucht.

9. Kommentar von ramon
Freitag 8.Februar 2008: 12:14

jo, danke auch von meiner seite für die funtion! klappt alles bestens!
weiter so! gruß

10. Kommentar von Opmil
Samstag 10.Mai 2008: 11:47

Hallo

Wäre toFixed() nicht einfacher?
http://de.selfhtml.org/javascript/objekte/number.htm#to_fixed

11. Kommentar von Struppi
Sonntag 11.Mai 2008: 12:25

Ja würe es, wenn es richtig Runden würde und wenn es auch die tausender Stellen formatieren würde. Probier mal z.b. 1202.955 mit toFixed() aus (zumindest FF und OP rundet das falsch [1202.95]).

12. Kommentar von mormel
Mittwoch 23.Juli 2008: 11:10

hi struppi,

danke für deine funktion, nur gibt es noch einen fehler:

aus 1.234,00 oder auch 0,00 wird NaN,00

vg mormel

13. Kommentar von Struppi
Mittwoch 23.Juli 2008: 11:20

Das ist kein Fehler, du musst natürlich eine Zahl eingeben 1.234,00 ist ein String, das Komma ist in JS (und allen anderen Programmiersprachen) ein Punkt

14. Kommentar von mormel
Mittwoch 23.Juli 2008: 11:37

hmm, natürlich, aber:
ich gebe in ein Formularfeld 1234 ein, dann wird deine Funktion per onblur aufgerfufen und es wird daraus 1.234,00. Gehe ich im Formular zurück und komme wieder in dieses Feld wird beim nächten onblur daraus NaN,00 und das ist nicht so gewollt, oder?

vg mormel

15. Kommentar von Struppi
Mittwoch 23.Juli 2008: 12:36

Dann musst du dies in deinem Skript entsprechend umwandeln. Es ist klar, dass der Rückgabewert der Funktion ein String ist, mit dem du nicht rechnen kannst (und auch nicht diese Funktion aufrufen).

16. Kommentar von atlan428
Samstag 13.September 2008: 17:00

Ich habe deine Funktion mal so umgeschrieben, dass sie gleich mit der PHP-Funktion number_format ist. Dürfte für alle PHP-Entwickler interessant sein.

function number_format(numeral, decimals, dec_point, thousands_sep) {
var neu = '';

// Runden
var f = Math.pow(10, decimals);
numeral = '' + parseInt(numeral * f + (.5 * (numeral > 0 ? 1: -1))) / f;

// Komma ermittlen
var idx = numeral.indexOf('.');

// fehlende Nullen einfügen
if(idx != -1) {
numeral += (idx == -1 ? '.': '') + f.toString().substring(1);
}

// Nachkommastellen ermittlen
idx = numeral.indexOf('.');
if(idx == -1) idx = numeral.length;
else neu = dec_point + numeral.substr(idx + 1, decimals);

// Tausendertrennzeichen
while(idx > 0) {
if(idx - 3 > 0)
neu = thousands_sep + numeral.substring(idx - 3, idx) + neu;
else
neu = numeral.substring(0, idx) + neu;
idx -= 3;
}

return neu;
}

17. Kommentar von Urs Bachmann
Samstag 3.Januar 2009: 17:43

Besten Dank fuer diese Funktion. Ich setzte sie ein um Zahlen aus FileMaker Web Companion zu formatieren.

Ich habe das Script noch so korrigiert, dass auch Nachnullen bei Zahlen ohne Dezimalstellen angezeigt werden. Auch das Einfuegen der Tausendermarkierung bei negativen Werten wird jetzt korrekt ausgefuehrt.

function number_format(numeral, decimals, dec_point, thousands_sep) {
var neu = '';

// Korrektur bei negativer Zahl, Teil 1
var negativ = '';
if(numeral 0 ? 1: -1))) / f;

// Komma ermittlen
var idx = numeral.indexOf('.');

// fehlende Nullen einfügen
if(idx != -1) {
numeral += (idx == -1 ? '.': '') + f.toString().substring(1);
}

// Nachkommastellen ermittlen
idx = numeral.indexOf('.');
if(idx == -1) {
idx = numeral.length;
neu = '.00';
}
else neu = dec_point + numeral.substr(idx + 1, decimals);

// Tausendertrennzeichen
while(idx > 0) {
if(idx - 3 > 0)
neu = thousands_sep + numeral.substring(idx - 3, idx) + neu;
else
neu = numeral.substring(0, idx) + neu;
idx -= 3;
}

// Korrektur bei negativer Zahl, Teil 2
neu =negativ + neu;

return neu;
}

18. Kommentar von Stefan
Montag 6.April 2009: 20:28

Das Script ist toll, aber könntest du bitte dein js-script bitte mir der Korrigierten PHP Version abbleichen bezüglich Tausendertrennzeichen bei negativen Zahlen.
Würde es ja gerne selbst machen, brings aber irgendwie nicht hin.

19. Kommentar von Struppi
Dienstag 7.April 2009: 8:36

ist drin.

Einen Kommentar hinterlassen

Name (erforderlich)
Mail (wird nicht angezeigt) (erforderlich)
Website


Powered by WordPress Stop Spam Harvesters, Join Project Honey Pot
rats-wonderful
rats-wonderful
rats-wonderful
rats-wonderful Browser-Statistiken