Struppi: Zahlenformatierung

Beitrag lesen

ich vermisse in Java eine Funktion number_format(), die genauso funktioniert, wie die gleichnamige Funktion in php, die mir also meine Zahl für Betrachter lesbarer darstellt, oder auch eine gewisse Anzahl von Nachkommastellen erzwingt.

Ich denke mal in Java gibt es sowas, aber in Javascript nur bedingt.

Ich habe in Selfhtml (Forum + Archive) und im Internet keine bzw. nicht so prickelnde Lösungen gefunden.
Warum soll jeder das Rad neu erfinden, also hab ich ein Funktion geschrieben, die die Allgemeinheit nutzen können soll.

Ich kenne ne Menge Lösungen.
eine Variante von mir: http://javascript.jstruebig.de/javascript/37/
allerdings erfüllt das nicht deine Vorgaben

number_format(zahl,decimal_num,dec_point,mill_sep)

Was mich an der Funktion stört, dass du keine Defaultwerte für das Komma und den Separator benutzt, da i.d.R. immer die gleichen verwendet werden.

Beispiele:
number_format(-123456.789,2,',','.') liefert -123.456,78
number_format(123456.789,2,'.',' ') liefert 123 456.78
number_format(123456.789,2,'.','') liefert 123456.78

Du rundest nicht auf?

Mein Vorschlag:

  
Number.prototype.format = function(komma, kommazeichen, tausender)  
{  
    if(!kommazeichen) kommazeichen  = ".";  
    if(typeof tausender == 'undefined') tausender = ",";  
  
    if(!komma) komma = 0;  
  
    var sign = (this < 0) ? "-" : "";  
    var nullen = Math.pow(10, komma);  
    var nummer = Math.round((Math.abs(this) * nullen)  )/ nullen;  
    var k = nummer.toString().indexOf(".");  
  
    if(k == -1) k = nummer.toString().length;  
  
    var nach =  nummer.toString().substring(k + 1);  
    var vor = nummer.toString().substring(0, k);  
    var i = vor.length;  
    var tmp = 0;  
    var vor_neu = ""  
    do {  
        vor_neu = vor.charAt(i) + vor_neu;  
        // Tausendertrennzeichen  
        if(tmp == 3 && i > -1)  
        {  
            vor_neu = tausender + vor_neu;  
            tmp = 0;  
        }  
        tmp++;  
    } while(i--)  
    nullen = nullen.toString().substring(1);  
    nach = (nach + nullen).substring(0, komma);  
    if(nach != "") vor_neu = vor_neu + kommazeichen + nach;  
    return sign + vor_neu;  
};  

Struppi.

--
Javascript ist toll (Perl auch!)