Martin: eine errechnete Zahl runden...

Hallo Leute,

ich habe derzeit folgendes Problem:
Ich habe für ein Formular diverse Eingabefelder. Werden in diversen Feldern Parameter eingegeben, so wird per Javascript für andere Felder das Ergebnis neu errechnet.

Das Problem ist:
Es handelt sich um Preise und Prozentangaben. Werden jetzt z.B. neue Preise errechnet wird als Zahl nicht mehr schön "45.87" sonder evtl so etwas "34.568976003" oder so ausgegeben.
Völlig klar, ist halt ein mathematisches Ergebnis.
Ich würde diese Zahl aber gerne wieder kaufmännisch runden wollen, so das bei obigem Beispiel wieder richtig "34.57" heraus kommt.

Gibt es da eine Funktion ähnlich "number_format()" aus PHP?

Wenn nein, hat da jemand eine Funktion, die das errechnet, oder muß ich da ganz back to the roots und mir grundlegende Mathematik neu erfinden?

Für eine kleine Hilfe wäre ich dankbar...

Gruß
Martin

  1. Schau dir doch mal die Math.round Funktion an:

    http://de.selfhtml.org/javascript/objekte/math.htm#round

    die macht genau das, was du willst.

    1. Hallo @all,

      vielen Dank für die schnellen Hilfen.

      Also, die Idee von Mark ist nicht brauchbar, da Sie nur den gerundeten Wert vor dem Komma ermittelt.

      Die zweite Idee von wahsaga kommt der Sache mittels "toPrecision()" schon etwas näher, Problem ist nur, das ich ja gar nicht weiß, wieviele Stellen die Zahl vor dem Komma haben wird, da man bei deiser Funktion die Gesamtläng angeben muß und nicht wie in PHP nur die Anzahl der Nachkommastellen.

      Die rechnerische Leistung von Andavos muß ich gleich mal ausprobieren od ex in Javascript auch geht, das wäre die beste Lösung.

      Wenn jemand noch eine bessere Idee hat oder die gennaten Funktionen besser einzusetzen vermag, ich bin für alles offen, danke.

      Gruß
      Martin

      1. Hi,

        Also, die Idee von Mark ist nicht brauchbar, da Sie nur den gerundeten Wert vor dem Komma ermittelt.

        • pruefen ob Kommastelle vorhanden,
        • mit 100 malnehmen
        • runden (Math.round)
        • durch 100 teilen.

        Gruesse, Joachim

        --
        Am Ende wird alles gut.
      2. hi,

        Die zweite Idee von wahsaga kommt der Sache mittels "toPrecision()" schon etwas näher, Problem ist nur, das ich ja gar nicht weiß, wieviele Stellen die Zahl vor dem Komma haben wird, da man bei deiser Funktion die Gesamtläng angeben muß und nicht wie in PHP nur die Anzahl der Nachkommastellen.

        toFixed() käme der sache dann vielleicht noch ein bisschen näher ...?

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hallo wahsaga,

          toFixed() käme der sache dann vielleicht noch ein bisschen näher ...?

          Vorsicht, toFixed kann der Safari nicht. Mal 100, runden, durch hundert ist wohl immer noch das Mittel der Wahl.

          Gruß, Jürgen

      3. Hi,

        Wenn jemand noch eine bessere Idee hat oder die gennaten Funktionen besser einzusetzen vermag, ich bin für alles offen, danke.

        Coding: Number-Library

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  2. hi,

    Ich würde diese Zahl aber gerne wieder kaufmännisch runden wollen, so das bei obigem Beispiel wieder richtig "34.57" heraus kommt.

    hast du dich bereits mit dem Math- und dem Number-objekt auseinandergesetzt?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Hallo,
    gibt es nicht die Funktion round wie in PHP?

    Also in C habe ich es ca. so geschrieben (in PHP übersetzt):

    $n = 2; //Zahlen auf die gerunden werden soll
    $i = pow(10,n); //10^n = 10^2

    $zahl_gerundet = floor($zahl*$i+0.5)/d;
    echo $zahl_gerundet;

    Das $n legt die Nachkommerstellen fest, das $i die 10er Potenz davon. Dann wird diese mit der $zahl Multipiziert und +0,5 Addiert.
    Danach wird es abgerundet und dann durch die 10er Potenz wieder geteilt.

    Beispiel:
    10^2 = 100
    10.456 * 100 = 1045.6
    1045.6+0.5 = 1046.1
    floor(1046.1) = 1046
    1046/100 = 10,46

    10.454 * 100 = 1045.4
    1045.4+0.5 = 1045.9
    floor(1045.9) = 1045
    1045/100 = 10,45

    MFG
    Andavos

  4. So, habe jetzt alles durchprobiert.

    Geholfen hat der erste Hinweis von Andavos, das alles zu einer einzigen Zeile zusammengefasst und klappt tatsächlich, vielen Dank.

    Da ich ja mit Preisen arbeite kann ich mir das Potenzieren sparen, es sind immer 2 Nachkommastellen, also Potenz 2 und somit Ergebnis 100.

    Vielleicht aber noch eine andere Frage:

    Da ich ja mit den eingegebenen Zahlen rechnen muß ist der Benutzer gezwungen bei Dezimalzahlen mit dem "." zu arbeiten, statt in Deutschland üblich mit ",".

    Hat da einer eine Idee wie das geht? Man müßte die Zahl ja erst in einen String wandeln, das Komma gegen Punkt tauschen, String in Zahl wandeln, rechnen und dann wieder zurück.

    Hab ich probiert, klappt irgendwie nicht...

    Gruß
    Martin

    1. Hallo Martin,

      Eingabefelder in Formularen liefern als Value immer einen String. Ich mache es so, dass ich ein evtl. vorhandenes Komma durch einen Punkt ersetze. Zusätzlich prüfe ich noch, ob der String eine Zahl ist.

        
      function get_num(id) {  
       var num=document.frm[id].value;  
       if (isNaN(num)) { num=num.replace(/,/g,"."); document.frm[id].value=num; }  
       if (isNaN(num)) { num=0.0; document.frm[id].value=num; }  
       return parseFloat(num);  
      }  
      
      

      Da ich bei meiner Anwendung der Funktion sicher sein kann, dass die Zahlen klein sind, muss ich mir über den 1000er Trennpunkt keine Gedanken machen. Denn wenn mehrere "." und "," oder beides vorkommen, liefert die obige Funktion 0.0.

      Gruß, Jürgen

    2. Hi,

      Man müßte die Zahl ja erst in einen String wandeln, das Komma gegen Punkt tauschen, String in Zahl wandeln, rechnen und dann wieder zurück.

      Hab ich probiert, klappt irgendwie nicht...

      Vielleicht weil die Eingabe bereit sein String ist und keine Zahl?

      Also einfach tauschen, rechnen und wieder in einen String wandeln (ich hatte ja schon einen Link gepostet - da findest Du auch eine Routine, die eine Zahl als eine "Komma-Zahl" formatiert ausgibt (also ggf. mit Nullen am Ende, die von JS sonst ebenfalls weggelassen werden).

      Gruß, Cybaer

      --
      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!