Sven Richter: Zahlenformatierung

Beitrag lesen

Hi Selfhtmler,

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 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.
Die Funktion ist soweit fehlerfrei, wer dennoch Fehler in der Funktion findet, die ich aus irgendeinem Grund nicht beachtet habe, kann dies ja hier posten.

number_format(zahl,decimal_num,dec_point,mill_sep)

Die Funktion selbst liefert einen String zurück.
Übergabewerte sind:
zahl : die zu formatierende Zahl
decimal_num: Anzahl der Nachkommastellen (int)
dec_point: Teiler zwischen Zahl und Nachkommastelle (string)
mill_sep: Teiler zur Tausendergruppierung (string)

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

  
function number_format (zahl,decimal_num,dec_point,mill_sep) {  
  var sign = '';  
  if(zahl < 0) {sign = '-';}  
  zahl = Math.abs(zahl);  
  var divisor = 1;  
  for(var i = 0; i < decimal_num; i++) {zahl *= 10; divisor *= 10;}  
  zahl = Math.floor(zahl);  
  var decimals= zahl % divisor;  
  decimals = '' + decimals;  
  for(var i = 0; i < decimal_num; i++) {zahl /= 10;}  
  zahl = Math.floor(zahl);  
  zahl = '' + zahl;  
  zahl_grp = '';  
  while(zahl.length > 3) {  
    zahl_grp = mill_sep + zahl.substr(zahl.length-3,3) + zahl_grp;  
    zahl = zahl.substr(0,zahl.length-3);  
  }  
  var str = zahl + zahl_grp;  
  if(decimal_num > 0) {  
    str = str + dec_point;  
    while(decimals.length != decimal_num) {decimals= decimals+ '0';}  
    str = str + decimals  
  }  
  return sign + str;  
}