Manfred Lechner: Fixkomma-stellen erzeugen ohne toFixed(2) für Javaskript<v1.5

Ich soll unterschiedliche werte (mal int, mal float) in einer Tabelle immer mit 2 Nachkommastellen darstellen. Die Funktion Wert.toFixed(2) funktioniert erst ab JavaSkript 1.5 und verursacht auf älteren Browsern Fehler.
Hat jemand eine Idee, wie sich das am Effektivsten bewerkstelligen lässt?
z.B. 51  20.3  22.189
soll dargestelllt werden als
51.00   20.30    22.19

  1. Hallo,

    Ich soll unterschiedliche werte (mal int, mal float) in einer Tabelle immer mit 2 Nachkommastellen darstellen. Die Funktion Wert.toFixed(2) funktioniert erst ab JavaSkript 1.5 und verursacht auf älteren Browsern Fehler.
    Hat jemand eine Idee, wie sich das am Effektivsten bewerkstelligen lässt?
    z.B. 51  20.3  22.189
    soll dargestelllt werden als
    51.00   20.30    22.19

    zahl = 51;

    pos = ("" + zahl).indexOf(".");
    if (pos<0)  ergebnis = "" + zahl + ".00";
    else {
      laenge = ("" + zahl).length;
      if (laenge-pos = 2) ergebnis = "" + zahl + "0";
      else  ergebnis = ("" + zahl).substr(0,pos+3);
    }

    Müsste so in etwa funktionieren. Hab's aber noch nicht getestet.

    Robert

    http://www.designauswahl.here.de
    mit kostenlosem Webseiten-Generator ROBE.dit
    [more than a HTMLE.dit]

  2. Hallo Manfred

    Ich soll unterschiedliche werte (mal int, mal float) in einer Tabelle immer mit 2 Nachkommastellen darstellen. Die Funktion Wert.toFixed(2) funktioniert erst ab JavaSkript 1.5 und verursacht auf älteren Browsern Fehler.
    Hat jemand eine Idee, wie sich das am Effektivsten bewerkstelligen lässt?

    Zwei Varianten:
    Im Archiv suchen:

    alternativ: http://selfsuche.teamone.de/cgi-bin/such.pl?suchausdruck=runden+2+Stellen&lang=on&feld=alle&index_4=on&index_5=on&hits=100

    oder:
    http://pc-anfaenger.de/script/jsrund.htm

    Viele Grüße

    Antje

  3. Hi

    Ui, der zwote heute der Probleme beim Runden hat.
    Habt ihr nie Basic(s) gelernt? ;)

    Zahl=Math.round(Zahl*100)/100;

    wenn du nicht willst dass ab .5 aufgerundet wird:

    Zahl=Math.round(Zahl*100-0.5)/100;

    Tschau
      Rolf

    1. Hi

      Habt ihr nie Basic(s) gelernt? ;)

      Zahl=Math.round(Zahl*100)/100;

      Erst lesen, dann schreiben;)

      in einer Tabelle immer mit 2 Nachkommastellen darstellen

      ----------------------------------------------------^^^^^^^^^^^

      Guid☺

      1. Hi Guido

        Habt ihr nie Basic(s) gelernt? ;)

        Zahl=Math.round(Zahl*100)/100;

        Erst lesen, dann schreiben;)

        Mea Culpa, hätte mir das 51.00 Beispiel anschauen sollen

        in einer Tabelle immer mit 2 Nachkommastellen darstellen
        ----------------------------------------------------^^^^^^^^^^^

        --------------------------^^^^^ :)

        Der Vollständigkeit halber fehlt also noch:

        if (Zahl==Math.round(Zahl))
           {zstring=Zahl+".00"}
        else
           {zstring=Zahl+""}

        Cheers
          Rolf

        1. Hi Guido

          Habt ihr nie Basic(s) gelernt? ;)

          Zahl=Math.round(Zahl*100)/100;

          Erst lesen, dann schreiben;)

          Mea Culpa, hätte mir das 51.00 Beispiel anschauen sollen

          in einer Tabelle immer mit 2 Nachkommastellen darstellen
          ----------------------------------------------------^^^^^^^^^^^
          --------------------------^^^^^ :)

          Der Vollständigkeit halber fehlt also noch:

          if (Zahl==Math.round(Zahl))
             {zstring=Zahl+".00"}
          else
             {zstring=Zahl+""}

          Cheers
            Rolf

          Hallo Rolf,

          der Vollständigkeit halber solltest Du noch den Code herposten, der auch bei Zahl=51.5 funktioniert. In diesem Fall hätte zstring nach Deiner Berechnung nur eine Nachkommastelle, anstelle der geforderten zwei Nachkommastellen.

          Mfg, Lutz.

          PS: Ich hab nie Basic(s) gelernt, das war mir zu primitiv.

          1. Hallo Lutz

            der Vollständigkeit halber solltest Du noch den Code herposten, der auch bei Zahl=51.5 funktioniert. In diesem Fall hätte zstring nach Deiner Berechnung nur eine Nachkommastelle, anstelle der geforderten zwei Nachkommastellen.

            Hmm ich hab die Aufgabenstellung unterschätzt, und nochen IF ist mir
            jetzt zu häßlich :)

            PS: Ich hab nie Basic(s) gelernt, das war mir zu primitiv.

            Ach weist Du ... damals wars mir lieber BASIC auf ner CBM 4000 (?) an der
            VHS zu lernen (mehr gabs dort nicht) als noch 5 Jahre zu warten bis mich
            ein umgeschulter Mathelehrer endlich in den Computerraum läßt. Sowas wie
            den VC20 kam damals leider erst später in die deutschen Kinderzimmern!

            JS bzw Scriptsprachen allgemein erinnern mich in Bezug auf den
            eingeschränkten Befehlssatz und der schwachen Typisierung tatsächlich sehr
            an Commodore-BASIC, da lernte man noch Sachen elementar zu erledigen.
            Sowas ähnliches wie den Code oben haben wir tatsächlich in der 4-5. Woche
            gemacht, deswegen das Wortspiel.

            mfg
              Rolf

  4. Hallo

    Da haben ja inzwischen ein paar geantwortet. Hier ist noch meine Version (getestet mit Mozilla).

    /*
    zahl: Die Zahl; rationale Zahl
    stellen: Anzahl der Nachkommastellen; natürliche Zahl
    nullen: Auffüllen mit Nullen; boolean
    function fix(zahl,stellen,nullen) {
     var ret = (new String(zahl)).split(".")[0];
     if((new String(zahl)).indexOf(".") != -1) {
       ret += "." + (new String(zahl)).split(".")[1].substring(0,stellen);
     }
     else if(nullen) ret += ".";
     if(nullen) while(ret.length < (ret.indexOf(".") + new Number(stellen) + 1)) {
       ret += "0";
     }
     return ret;
    }

    Grüße

    Daniel

  5. Ich soll unterschiedliche werte (mal int, mal float) in einer Tabelle immer mit 2 Nachkommastellen darstellen. Die Funktion Wert.toFixed(2) funktioniert erst ab JavaSkript 1.5 und verursacht auf älteren Browsern Fehler.
    Hat jemand eine Idee, wie sich das am Effektivsten bewerkstelligen lässt?
    z.B. 51  20.3  22.189
    soll dargestelllt werden als
    51.00   20.30    22.19

    Klar doch,
    hier mein Lösungs-Vorschlag als Einzeiler:

    zahl_fixed=parseInt(zahl)+"."+String(Math.abs(Math.round(zahl*100))%100+100).substr(1,2);

    Gruß Lutz