Aishe: Nachkommastellen im Javascript

Hallo zusammen!

Ich haber vor kurzen schon einmal bezüglich dieses Problem ins Forum gepostet. Leider haben die Tips nichts gebracht. Daher wollte ich noch einmal fragen, ob ihr mir noch einmal helfen könnt.

Hier ist der Quelltext:

var basket = parent.basket.substring(0, parent.basket.length-3);
if (basket != null) items = basket.split('###');
for (i in items) items[i] = items[i].split('|');

function runden(wert) {
 k = (Math.round(100 * (wert + 0.00001)) / 100 + 0.001) + '';
    k = k.substring(0, k.indexOf('.') + 3);
    return k;

}

function rechnen() {
 zsumme = runden(parseFloat(items[i][2]))*runden(parseFloat(items[i][3]));
 gesamtpreis += runden(parseFloat(items[i][2]))*runden(parseFloat(items[i][3]));
 ergebnis = runden(zsumme);
 return ergebnis;
}

function gesamt() {
 gesamtpreis = runden(gesamtpreis);
    return gesamtpreis
}

function dazu(name,nummer,preis,menge) {
if(menge <= 0 || menge > maxmenge)
   alert(error);
else
   if (confirm('Möchten Sie '+menge+' x '+name+' in Warenkorb ablegen? '))
    parent.basket += name+'|'+nummer+'|'+preis+'|'+menge+'###';
}

function del_me(cnt) {
 if (confirm(del_art)) {
 var del = '';
 basket = parent.basket.substring(0, parent.basket.length-3);
 if (basket != null) items = basket.split('###');
 for (i in items) {
   if (i != cnt) del += items[i] +'###';
      }
  parent.basket = del;
 self.location = 'warenkorb.html';
 }
}

Was muss ich tun, um diese "blöden" Nachkommastellen wegzubekommen.
Ich habe die function runden gelöscht, und dann in den anderen functionen "runden" durch Math.round ersetzt. Wo ist der Gedanken fehler?

...Ein Königreich für die Lösung :-)))

Gruß
Aishe

  1. Hi Aishe,

    Was muss ich tun, um diese "blöden" Nachkommastellen wegzubekommen.
    Ich habe die function runden gelöscht, und dann in den anderen functionen "runden" durch Math.round ersetzt. Wo ist der Gedanken fehler?

    Habe weder Dein vorheriges Posting gelesen, noch Deine Funktionen studiert, aber.

    Wenn Du lediglich die Nachkommastellen abschneiden willst, dann mach das einfach per

    var x = 12.357487;
    var y = x.split(".");
    var Endprodukt = y[0];

    Wenn Du effektiv runden willst, dann eben

    var x = 12.357487;
    var Endprodukt = Math.round(x);

    Hier wird in beiden Fällen "12" ausgegeben, bei bspw. 12.87654 gibt die erste Version "12", die zweite "13" aus.

    ...Ein Königreich für die Lösung :-)))

    Ach, lass mal stecken! :)

    1. gruss MIK,

      Wenn Du lediglich die Nachkommastellen abschneiden willst,
      dann mach das einfach per

      var x = 12.357487;
      var y = x.split(".");
      var Endprodukt = y[0];

      nein!
         - entweder: var x = "12.357487";
         - oder: var y = x.toString().split(".");

      Wenn Du effektiv runden willst, dann eben

      var x = 12.357487;
      var Endprodukt = Math.round(x);

      Hier wird in beiden Fällen "12" ausgegeben, ...

      nein:
         - zumindest im ersten fall hast Du
           nicht getestet, was Du Aishe da
           unterjubeln willst;

      ...Ein Königreich für die Lösung :-)))

      Ach, lass mal stecken! :)

      grosskotz ;-)

      es gibt da auch noch die globale funktion "parseInt";

      by(t)e by(t)e - peterS. - pseliger@gmx.net

      --
      sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)
      1. Ach Herrjemine,

        ich hab's praxisnah getestet indem ich die Variable x einem Input-Feld entnommen habe.

        In diesem Sinne wünsche ich Dir was Sinnvolles zu tun und verabschiede mich mit einem doppelten Stinkefinger,

        MIK

        1. hallo again MIK,

          Ach Herrjemine,

          ich hab's praxisnah getestet ...

          das ehrt Dich ...

          ... indem ich die Variable x einem Input-Feld entnommen habe.

          ... und hier hast Du nicht mehr in Aishes sinne mitgedacht,
             denn jeder, der Deinen hier ins forum gestellten code aus-
             probiert bekommt vom browser eine fehlermeldung um die ohren
             gehauen;

          noch einmal:

          var x = 12.357487;
          var y = x.split(".");
          var Endprodukt = y[0];

          - so funktioniert das nicht, da "x" vom typ "number" ist,
               die methode "split" aber, wie Du eben selbst richtig
               erklaert hast, eben nicht auf "Number"-, sondern auf
               "String"-objekte angewandt werden muss;

          nur - _Dein_gegebenes_beispiel_ laesst dies ausser acht;

          egal in welchem kontext Du getestet hast - was Du hier
               anderen zur hilfe hinschreibst, sollte eben stimmen,
               denn sie muessen sich auf das was HIER steht verlassen
               koennen, da sie keinen einblick in Deine testumgebung
               haben;

          In diesem Sinne wünsche ich Dir was Sinnvolles zu tun ...

          ... was hiermit wieder einmal geschehen ist;

          ... und verabschiede mich mit einem doppelten Stinkefinger,

          habe ich dich beleidigt?
             vertraegst Du sachliche kritik nicht?

          verkneif' Dir diese kommentare besser beim naechsten mal;

          so long - peterS. - pseliger@gmx.net

          --
          sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)
          1. peterS,

            es ist wirklich wunderbar konstruktiv von Dir, in epischer Breite zu erklären, warum man bei einem Komma-Wert, der nicht aus einem input-Feld stammt, Anführungszeichen zu notieren hat.

            Sollte Dir - was ich bezweifle - tatsächlich nicht klar sein, warum ich auf Deine großkotzigen Postings nicht mit dankbarer Demut reagiere, such Dir bitte jmd. anderen, der es Dir erklärt.

            In diesem Sinne nicht an weiterer Diskussion interessiert,

            MIK

            1. lieber MIK,

              es ist wirklich wunderbar konstruktiv von Dir,
              in epischer Breite zu erklären, warum man bei
              einem Komma-Wert, der nicht aus einem input-Feld stammt,
              Anführungszeichen zu notieren hat.

              zum zeitpunkt Deiner Antwort an Aishe warst Du der einzige,
                 der sich genau dessen bewusst war;  ins forum stelltest Du
                 aber folgendes:

              var x = 12.357487;
              var y = x.split(".");
              var Endprodukt = y[0];

              jeden, in sachen javascript noch nicht ganz sattelfesten,
                 hier hilfesuchenden, laesst diese loesung jedoch verwirrt
                 zurueck, denn dieses beispiel funktioniert so nicht;

              _nur_darauf_ habe ich Dich hingewiesen, und ich glaube
                 nicht, dass dies in herablassender, agressiver oder in
                 sonstiger beleidigender weise geschah;

              Sollte Dir - was ich bezweifle - tatsächlich nicht klar sein,

              --------------^^^^^^^^^^^^^^^^^^^^^ hast Du es so sehr noetig?

              warum ich auf Deine großkotzigen Postings nicht mit

              -----------------^^^^^^^^^^^^^^^^^^^^^^^^^^^
                 es sind jetzt genau drei - wo bitte bin ich grosskotzig?

              dankbarer Demut reagiere, such Dir bitte jmd. anderen,

              ---^^^^^^^^^^^^^^^
                 das erwarte weder ich noch irgend jemand anderes von Dir -
                 ...aehm... vielleicht ein kleines: "oops, *vor den kopf schlag*,
                 das habe ich bei aller eile jemandem zu helfen, uebersehen ;-)"
                 ... oder so;

              der es Dir erklärt.

              mir ist das schon klar, ich lass Dich jetzt ja auch nur nicht
                 so einfach davon kommen, weil ich leider noch nicht abgeklaert
                 genug bin, mir von Dir nach einem in der sache richtigen hinweis,
                 einen doppelten stinkefinger zeigen zu lassen;

              bis zum naechsten zusammenprall,
                 tschuess - peterS. - pseliger@gmx.net

              --
              sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)
  2. Hallo Aishe,

    Ich haber vor kurzen schon einmal bezüglich dieses Problem ins Forum gepostet.

    ich erinnere mich dunkel. Ich hatte damals nur eine vage Vorstellung was genau dein Problem ist.

    Leider haben die Tips nichts gebracht. Daher wollte ich noch einmal fragen, ob ihr mir noch einmal helfen könnt.

    Hier ist der Quelltext:

    ... schnipp
    ... jede Menge js-Code ...

    Was muss ich tun, um diese "blöden" Nachkommastellen wegzubekommen.

    WO entstehen denn die "blöden?" Nachkommastellen? Es ist sicher hilfreicher wenn du erst mal ein Beispiel postest.

    1,5 + 2,3 = 3,8 was soll jetzt daraus werden?
    ohne Nachkommastellen, mit einer? gerundet oder ungerundet? kaufmännisch? 2 Nachkommastellen?

    3,0 oder 3,80 oder 4 oder 4,0 oder 3? oder 3,00?

    Grüße,

    Jochen

    1. Holla!

      1,5 + 2,3 = 3,8 was soll jetzt daraus werden?
      ohne Nachkommastellen, mit einer? gerundet oder ungerundet? kaufmännisch? 2 Nachkommastellen?

      3,0 oder 3,80 oder 4 oder 4,0 oder 3? oder 3,00?

      Wenn man mit x Nachkommastellen runden will, also bspw. mit zweien, dann multipliziert man den Wert mit 100, bei dreien mit 1000 usw. Dann wird Math.round() angewandt und wieder durch 100, 1000 usw. geteilt.

      1. Hi MIK,

        Wenn man mit x Nachkommastellen runden will, also bspw. mit zweien, dann multipliziert man den Wert mit 100, bei dreien mit 1000 usw. Dann wird Math.round() angewandt und wieder durch 100, 1000 usw. geteilt.

        Die Vorgehensweise bei runden ist mir durchaus geläufig. Danke.
        ABER! Deine Formel ist dennoch falsch.

        Bei der _kaufmännischen_ Rundung wird -23.495 auf -23.50 gerundet. Und nicht wie in der Mathematik (und nach deiner Vorgehensweise) auf -23.49

        Nur so. Grüße,

        Jochen

        1. Hallo Maxx, hallo Jochen,

          Die Vorgehensweise bei runden ist mir durchaus geläufig. Danke.

          Wollte Dich nicht in Deiner Rundungsehre kränken. :) Es ist auch durchaus üblich, dass man auf ein Posting antwortet, um das darin angesprochene Problem zu erörtern, ohne konkret dem Postenden was erklären zu wollen.

          ABER!

          *zusammenzuck*

          Deine Formel ist dennoch falsch.

          Stimmt doch gar nicht!

          Bei der _kaufmännischen_ Rundung wird -23.495 auf -23.50 gerundet. Und nicht wie in der Mathematik (und nach deiner Vorgehensweise) auf -23.49

          Na gut, dann ist die Formel nicht für _kaufmännisches_ Runden im negativen Bereich korrekt.

          Wie müsste denn eine solche Formel aussehen?

          Bis denne,

          MIK

          1. Nicht streiten! :-))
            Vielen Dank erst mal für Eure Hilfe. Ich werde das heute abend mal testen. Hoffentlich bekomme ich das hin.

            Euch noch einen schönen Tag.

            Gruß
            Aishe

          2. Hi MIK,

            Die Vorgehensweise bei runden ist mir durchaus geläufig. Danke.

            Wollte Dich nicht in Deiner Rundungsehre kränken.

            Nö, das hast du nicht. Aber dein Nick-MIK war mir unbekannt.
            Und eine Suche hat auch nichts ergeben. Ich war ob deines Postings nur etwas irritiert.

            Es ist auch durchaus üblich, dass man auf ein Posting antwortet, um das darin angesprochene Problem zu erörtern

            Ich wollte nur mehr Informationen ...

            ohne konkret dem Postenden was erklären zu wollen.

            Ja, nur deine Erklärung passte irgendwie nicht so recht zu der Frage ich Aishe gestellt hatte.

            Bei der _kaufmännischen_ Rundung wird -23.495 auf -23.50 gerundet. Und nicht wie in der Mathematik (und nach deiner Vorgehensweise) auf -23.49

            Na gut, dann ist die Formel nicht für _kaufmännisches_ Runden im negativen Bereich korrekt.

            Wie müsste denn eine solche Formel aussehen?

            Im Falle einer negativen Zahl vor der Rundung 0,5 abziehen.

            Grüße,

            Jochen

  3. Hi,

    ohne deine Sourecen zu testen:

    ...Ein Königreich für die Lösung :-)))

    Wo ist das Problem bei Nutzung von http://www.vampirehost.de/gruft/coding/jscript/numlib.htm?

    Ausgabe von zwingend 2 Nachkommastellen (das war es AFAIR doch, oder?) wäre also

    var PreisNum=10.1
    var PreisString=dez(dezRound(PreisNum,2),0,2)

    wobei dezRound() die Rundung auf 2 Stellen ist (",2"), und dez() die Ausgabe des Wertes (nunmehr natürlich als Zeichenkette) mit mindestens 2 Nachkommastellen ist (",2"), PreisString ist dann also "10.10".

    Gruß, Cybaer