Igor: Nachkomma Stelle in Variable speichern

Hallo!

Ich führe eine Rechnung aus, bei der eine Kommazahl mit einer Nachkomma Stelle rauskommt (also bspw. 0,2).

rechnung = wert1 / wert2;
kommazahl = ??

Die Variable "kommazahl" will ich nun mit der jeweiligen Nachkommastelle der Rechnung bzw. des Ergebnisses der Rechnung füllen (also hier bspw. die "2"), wie kann ich das machen?
Mfg

Igor

  1. Hallo Igor,

    Die Variable "kommazahl" will ich nun mit der jeweiligen Nachkommastelle der Rechnung bzw. des Ergebnisses der Rechnung füllen (also hier bspw. die "2"), wie kann ich das machen?

    Verwende Modulo.

    rechnung = wert1 / wert2;
    kommazahl = ??

    kommazahl = wert1 % wert2;

    Grüße
    Andreas

    1. Hi Andreas,

      das war - denke ich - nicht die Fragestellung. Auf seine "0,2" kommt er, wenn er z. B. "1 / 5" rechnet. Eine Modulo-Operation bringt ihm an dieser Stelle gar nix :-(

      Ciao
      Hans-Peter

      1. Hallo Hans-Peter,

        das war - denke ich - nicht die Fragestellung. Auf seine "0,2" kommt er, wenn er z. B. "1 / 5" rechnet. Eine Modulo-Operation bringt ihm an dieser Stelle gar nix :-(

        Du hast recht. Da hab ich wohl schneller getippt als gedacht :-(

        Grüße
        Andreas

  2. Hi Igor,

    verzeihung, aber die Nachkommazahl ist nicht "2" sondern "0,2". Willst Du vielleicht Divisions-Rest speichern ? Oder anders gefragt, welche Zahl willst Du bei der Berechnung "1/3" speichern ? Wieviel MByte willst Du dafür reservieren ? Oder noch anders gefragt: Was willst Du eigentlich wirklich erreichen ?

    Ciao
    Hans-Peter

  3. Hallo,

    Ich führe eine Rechnung aus, bei der eine Kommazahl mit einer Nachkomma Stelle rauskommt (also bspw. 0,2).

    rechnung = wert1 / wert2;
    kommazahl = ??

    Die Variable "kommazahl" will ich nun mit der jeweiligen Nachkommastelle der Rechnung bzw. des Ergebnisses der Rechnung füllen (also hier bspw. die "2"), wie kann ich das machen?

    Suchst Du das?

    var wert1,wert2,rechnung,kommazahl;

    wert1=1;
    wert2=5;
    rechnung=wert1/wert2;
    kommazahl=rechnung.toString().substring(rechnung.toString().indexOf(".")+1,rechnung.toString().length);
    alert(rechnung);  // 0.2
    alert(kommazahl); // 2

    MfG, Thomas

    1. [Nachtrag:]

      kommazahl=rechnung.toString().substring(rechnung.toString().indexOf(".")+1,rechnung.toString().length);

      Verwende diese Zeile, um einen numerischen Wert zu erhalten:

      kommazahl=parseInt(rechnung.toString().substring(rechnung.toString().indexOf(".")+1,rechnung.toString().length,10));

      MfG, Thomas

    2. Hallo Thomas,

      kommazahl=rechnung.toString().substring(rechnung.toString().indexOf(".")+1,rechnung.toString().length);

      Das ist vermutlich die perfekte Lösung. Trotzdem komme ich bei derlei Anfragen immer ins Grübeln, ob der Frager weiß, was er sich mit der Antwort einhandelt. Warum er nicht seine Problem beschreibt, sondern den letzten Schritt vor der vermeintlichen Lösung.

      Nachkommastellen (1, 5) ergibt tatsächlich 2
      Nachkommastellen (1, 3) ergibt bei mir     3333333333333333

      und ich würde meine Hand nicht ins Feuer legen, dass das auf einem (8-bittigen) 8051 und einem (64-bittigen) Itanium gerechnet auch herauskommen würde. Hat C schon den "integer" nicht wirklich definieren können, so traue ich das JavaScript - über alle Plattformen hinweg - auch nicht zu.

      Weht in derlei Lösungen nicht der Geist, der zum Y2K-Bug geführt hat ?

      Ciao
      Hans-Peter

      1. Hallo,

        Das ist vermutlich die perfekte Lösung.

        Nicht unbedingt. Da ist die Loesung von Karin noch effizienter. Wenn keine Nachkommastellen vorhanden sind, ergibt mein Ansatz die Zahl selbst, der von Karin jedoch undefinded.

        Hier mal der Versuch mit einer Funktion, die beim Fehlen von Nachkommastellen false zurueck gibt:

        function Nachkommastellen(wert)
        {
          result=parseInt((wert.toString().split("."))[1],10);
          return (isNaN(result))?false:result;
        }

        var wert1,wert2,rechnung,kommazahl;
        wert1=1;
        wert2=5;
        rechnung=wert1/wert2;
        alert(Nachkommastellen(rechnung)); // 2

        Trotzdem komme ich bei derlei Anfragen immer ins Grübeln, ob der Frager weiß, was er sich mit der Antwort einhandelt.

        Das sollte er mal selbst ausfuehren.

        MfG, Thomas

      2. Moin!

        und ich würde meine Hand nicht ins Feuer legen, dass das auf einem (8-bittigen) 8051 und einem (64-bittigen) Itanium gerechnet auch herauskommen würde. Hat C schon den "integer" nicht wirklich definieren können, so traue ich das JavaScript - über alle Plattformen hinweg - auch nicht zu.

        Gerade in JS ist der Number-Typ jedoch sehr klar definiert. Siehe Kapitel 8.5 der ECMA-262-Spec. Das erkauft man sich natuerlich mit einem Verlust an Flexibilitaet. Eine automatische Anpassung an die Maschinenwortbreite des Zielsystems findet nicht statt. Aber meistens ist das ohnehin nicht wuenschenswert. Der Number-Typ aehnelt auch vielmehr dem double aus C als dem int.

        So long

        --
        Bier trinken fetzt!!!
  4. Hallo!

    Ich führe eine Rechnung aus, bei der eine Kommazahl mit einer Nachkomma Stelle rauskommt (also bspw. 0,2).

    rechnung = wert1 / wert2;
    kommazahl = ??

    Die Variable "kommazahl" will ich nun mit der jeweiligen Nachkommastelle der Rechnung bzw. des Ergebnisses der Rechnung füllen (also hier bspw. die "2"), wie kann ich das machen?
    Mfg

    Igor

    versuchs mal so:
    var a, b, test1, test2, test3, gesuchteVariable;

    test1 = a / b;
    test3 = test1.toString();
    test2 = test3.split(".");
    gesuchteVariable = test2[1];

    das ist die Version fuer ein englisches System, beim deutschen musst du
    test3.split(",") machen.

    Gruss
    Karin

    1. Hi!

      versuchs mal so:
      var a, b, test1, test2, test3, gesuchteVariable;

      test1 = a / b;
      test3 = test1.toString();
      test2 = test3.split(".");
      gesuchteVariable = test2[1];

      das ist die Version fuer ein englisches System, beim deutschen musst du
      test3.split(",") machen.

      Ein Browser, bei dem das noetig ist, ist definitiv kaputt. Die toString()-Methode einer Number muss immer den englischen Dezimalpunkt verwenden. Anders sieht es aus, wenn man toLocaleString() verwendet, allerdings ist deren Verhalten nicht eindeutig definiert.

      So long

      --
      Bier trinken fetzt!!!
  5. Hi Igor,

    das würde mich jetzt wirklich mal interessieren: Wozu brauchst Du das ?

    Ciao
    Hans-Peter