Nicole: Bestellformular: Beträge runden, 2 Kommastellen

Hallo,
habe ein kleines Bestellformular, in dem der Benutzer eine Anzahl eines Produktes eingeben kann und dann der Preis ohne und inkl. MwST angezeigt wird. Ausserdem wird der Gesamtbetrag + Versand + Steueren errechnet.
Leider gibt er mir durch diese MwSt-Berechnung Zahlen aus wie 3,3499999999...
Nun möchte ich diese auf Dezimalstellen runden.

Hier einmal der wesentliche Teil des Scriptes:

// Gesamtbetrag
   var Itemsteuer = 116 / 100;
   var Versandsteuer = 116 / 100;
function Total() {
   var tot = 0;
   var totalall = 0;
   Versandkostenx = 4.90;
   var Versandkosten = Versandkostenx;
   Versandkosten = 0;
   tot += (75.00 * document.order.Anzahl_Artikel7511.value);
   tot += (34.50 * document.order.Anzahl_Artikel4041.value);
   tot += (229.00 * document.order.Anzahl_Artikel9226.value);
   tot += (8.50 * document.order.Anzahl_Artikel1161.value);
   tot += (1.45 * document.order.Anzahl_Artikel1193.value);
   tot += (3.25 * document.order.Anzahl_Artikel2611.value);
   tot += (1125.00 * document.order.Anzahl_Artikel60887.value);
   tot += (629.00 * document.order.Anzahl_Artikel60898.value);

document.order.Gesamtbestellung.value = tot;
   if (tot == 0) {Versandkosten == 0}
   else {Versandkosten = Versandkostenx};
   document.order.Versandkosten.value = Versandkosten;

Bestellsteuerbetrag =  (Itemsteuer * tot) - tot;
   Versandkostensteuer = (Versandsteuer * Versandkosten) - Versandkosten;
   AusgewSteuer = Bestellsteuerbetrag + Versandkostensteuer;
   document.order.AusgewSteuer.value = AusgewSteuer;
   document.order.Rechnungsbetrag.value = AusgewSteuer + tot + Versandkosten;
};

function UpdateBetrag(number, Einzelkosten, Inklusivbetrag) {
   qtyname = "Anzahl_Artikel" + number;
   costname = "Betrag" + number;
   Steuername = "Inklusivbetrag" + number;
   var q = document.order[qtyname].value;
   document.order[costname].value = q * Einzelkosten;
   document.order[Steuername].value = q * Einzelkosten * Itemsteuer;
   Total();
}

Hier ein Beispiel für die Artikelfelder:

<input type="TEXT" name="Anzahl_Artikel7511" value="0" size=4 onchange="UpdateBetrag(7511, 75.00);">
<input type="TEXT" name="Betrag7511" size=6 disabled>
<input type="TEXT" name="Inklusivbetrag7511" size=6 disabled>

Und dann noch folgende Felder:

<input type="TEXT" name="Gesamtbestellung">
<input type="TEXT" name="Versandkosten">
<input type="TEXT" name="AusgewSteuer">
<input type="TEXT" name="Rechnungsbetrag">

Ich hab schon etwas mit Math.round() rumprobiert, aber es will einfach nicht klappen. Ich weiss einfach nicht, welche Funktion ich schreiben soll, und wie ich diese dann auf die ganzen input-Felder anwenden soll, die die MwSt enthalten.

Viele Grüsse,
Nicole

  1. hi,

    Ich hab schon etwas mit Math.round() rumprobiert, aber es will einfach nicht klappen.

    Number.toFixed()

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Danke, aber was muss ich denn als Wert angeben und wo muss ich das einbinden? Ich habe ja mehrere input-Formularfelder, bei denen mein Problem auftritt.

      1. hi,

        Danke, aber was muss ich denn als Wert angeben und wo muss ich das einbinden?

        Was genau hast du am Beispiel denn nicht verstanden?

        Ich habe ja mehrere input-Formularfelder, bei denen mein Problem auftritt.

        Wende es auf jeden nummerischen Wert, den du auf diese Weise gerundet darstellen willst, an.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      2. Hell-O!

        was muss ich denn als Wert angeben

        Die Anzahl der gewünschten Nachkommastellen, in deinem Fall also 2.

        und wo muss ich das einbinden?

        Bei jeder Berechnung, die du runden möchtest. Mal eines rausgepickt:

        Bestellsteuerbetrag =  (Itemsteuer * tot) - tot;  
        Bestellsteuerbetrag.toFixed(2);
        

        Oder Quick'n'dirty:

        Bestellsteuerbetrag = ((Itemsteuer * tot) - tot).toFixed(2);

        Alles klar?

        Siechfred

        --
        Ich bin strenggenommen auch nur interessierter Laie. (molily)
        Siechfreds Tagebuch || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.
        1. Hallo Siechfred,

          Oder Quick'n'dirty:
          Bestellsteuerbetrag = ((Itemsteuer * tot) - tot).toFixed(2);

          das ist zwar quick, aber alles andere als dirty - im Gegenteil, es ist der direkte Weg, der nur auf unnötige Schnörkel und Klimmzüge verzichtet.

          Alles klar?

          Hoffentlich. ;-)

          So long,
           Martin

          --
          Ich bin 30. Ich demensiere apokalyptisch.
            (Orlando)
    2. n'abend,

      Ich hab schon etwas mit Math.round() rumprobiert, aber es will einfach nicht klappen.
      Number.toFixed()

      das toFixed() schneidet die nachkommastellen aber ab, da wird nix gerundet.
      Da Math.round() auf ganze Zahlen rundet, muss man die Kommastelle eben entsprechend verschieben:

      var rounded = Math.round( 3.1415 * 100 )/100;

      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. Ebenfalls schönen Abend, mein Gutester,

        das toFixed() schneidet die nachkommastellen aber ab, da wird nix gerundet.

        Sowohl die Beschreibung in SELFHTML als auch der kurzes Praxistest über Eingabe von
        javascript:alert((7123.209848).toFixed(2));
        in die Adresszeilen von IE 6, Opera 8.54 und Firefox 1.5 strafen dich da lügen ...

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. n'abend,

          Sowohl die Beschreibung in SELFHTML als auch der kurzes Praxistest über Eingabe von
          javascript:alert((7123.209848).toFixed(2));
          in die Adresszeilen von IE 6, Opera 8.54 und Firefox 1.5 strafen dich da lügen ...

          würde ich virtuell erröten können, würde ich mir glatt überlegen dies zu tun.
          wenn man nach «...bedeutet wie: schneide nach 2 Nachkommastellen ab.» aufhört zu lesen ist das schon irgendwie tooph™

          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:|