Sebastian: Fließkommazahlen formatieren

Hallo zusammen,

ich stehe gerade vor dem Problem, dass ich in JavaScript gerne etwas hätte, was ich in php mit Hilfe von number_format() realisieren kann, nämlich dass die Zahl "1.254,50" auch wirklich so aussieht, auch wenn sie im Hintergrund als "1254.5" fungiert.

Gibt es in JavaScript eine Möglichkeit, Zahlen so zu formatieren?

Vielen Dank für Eure Hilfe und viele Grüße,
Sebastian

  1. n'abend,

    Gibt es in JavaScript eine Möglichkeit, Zahlen so zu formatieren?

    eine vorgefertigte Funktion gibt es dafür (zumindes laut Number) nicht.

    Du solltest dir diese Funktionalität aber mit ein bischen Regular Expressions und String-Funktionen nachbauen können.

    weiterhin schönen abend...

    --
    Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
    1. Hallo!

      Gibt es in JavaScript eine Möglichkeit, Zahlen so zu formatieren?

      Du solltest dir diese Funktionalität aber mit ein bischen Regular Expressions und String-Funktionen nachbauen können.

      Falls ich es vergessen hatte zu erwähnen: Mit php kenne ich mich besser aus als mit JavScript und deshalb wird mir das Nachbauen nicht gelingen. Zumindest nicht mehr dieses Jahr.
      Da ich das ganze aber recht kurzfristig benötige, bin ich für jede Hilfe dankbar!

      Vielleicht hat ja jemand Erbarmen?!

      Danke & Gruß,
      Sebastian

      1. Hallo Sebastian.

        Gibt es in JavaScript eine Möglichkeit, Zahlen so zu formatieren?

        Du solltest dir diese Funktionalität aber mit ein bischen Regular Expressions und String-Funktionen nachbauen können.

        Falls ich es vergessen hatte zu erwähnen: Mit php kenne ich mich besser aus als mit JavScript und deshalb wird mir das Nachbauen nicht gelingen. Zumindest nicht mehr dieses Jahr.
        Da ich das ganze aber recht kurzfristig benötige, bin ich für jede Hilfe dankbar!

        Hier einmal eine mögliche Implementation:

        Number.prototype.toGerman = function() {  
          
          if (typeof(Array.prototype.splice) != 'function') { // IE < 5.5  
          
            return false;  
          }  
          
          var s = this.toString();  
          var pos = s.lastIndexOf('.'); // Letzte Position des Punktes suchen  
          
          s = s.split(''); // Zeichenkette in Array aufsplitten  
          s[pos] = ','; // Punkt durch Komma ersetzen  
          
          // Ab Position des Kommas Array rückwärts durchlaufen  
          for (var i = pos; i > -1; --i) {  
          
            /* Alle drei Ziffern Tausendertrennzeichen setzen;  
             * natürlich nicht direkt vor das Komma  
             */  
            if (((i - 1) % 3 == 0) && (i != pos)) {  
          
              s.splice(i, 0, '.');  
            }  
          }  
          
          // Array wieder als Zeichenkette zusammensetzen und zurückgeben  
          return s.join('');  
        }  
        
        

        Da diese Methode nun prototypisch an das Number-Objekt gebunden wurde, steht es praktischerweise direkt bei jeder Zahl zur Verfügung:

        var a = 1234567.89;  
        var aS = a.toGerman();  
          
        alert(aS); // 1.234.567,89  
        
        

        Einen schönen Sonntag noch.

        Gruß, Mathias

        --
        ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
        debian/rules
        1. Hallo nochmal.

          Hier einmal eine mögliche Implementation:

          Kleine Korrektur für bessere Performance:

          Number.prototype.toGerman = function() {  
            
            if (typeof(Array.prototype.splice) != 'function') { // IE < 5.5  
            
              return false;  
            }  
            
            var s = new String(this); // Zahl in Zeichenkette umwandeln  
            var pos = s.lastIndexOf('.'); // Letzte Position des Punktes suchen  
            
            s = s.split(''); // Zeichenkette in Array aufsplitten  
            s[pos] = ','; // Punkt durch Komma ersetzen  
            
            // Ab Position des Kommas Array rückwärts durchlaufen  
            for (var i = pos; i > -1; --i) {  
            
              /* Alle drei Ziffern Tausendertrennzeichen setzen;  
                * natürlich nicht direkt vor das Komma  
                */  
              if (((i - 1) % 3 == 0) && (i != pos)) {  
            
                s.splice(i, 0, '.');  
              }  
            }  
            
            // Array wieder als Zeichenkette zusammensetzen und zurück geben  
            return s.join('');  
          }
          

          Hierbei spart man sich durch das explizite Erstellen eines String-Objektes die implizite Umwandlung von Literal zu Objekt bei den Aufrufen von lastIndexOf() und split().

          Gruß, Math*genug jetzt*ias

          --
          ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
          debian/rules
          1. Moin

            was genau bewirkt/bezweckt

              
              if (typeof(Array.prototype.splice) != 'function') { // IE < 5.5  
              
                return false;  
              }  
            
            

            ?

            Gruß
            rfb

            1. was genau bewirkt/bezweckt

              if (typeof(Array.prototype.splice) != 'function') { // IE < 5.5

              return false;
                }

              
              > ?  
                
              Das prüft ob der Browser die Funktion splice nicht kennt und bricht in dem Falle die Funktion ab.  
                
              Struppi.
              
              -- 
              [Javascript ist toll](http://javascript.jstruebig.de/) (Perl auch!)