Alexander: Aufrunden / Abrunden

Hallo!

Wie kann ich z.B die Zahl 96 auf 100 aufrunden oder 94 auf 90 abrunden. Bisher habe ich immer nur gesehen, wie so etwas mit Nachkammastellen funktioniert.
Weiß jemand eine Antwort??

Vielen Dank schonmal...Alex

  1. Hallo auch,

    Wie kann ich z.B die Zahl 96 auf 100 aufrunden oder 94 auf 90 abrunden. Bisher habe ich immer nur gesehen, wie so etwas mit Nachkammastellen funktioniert.
    Weiß jemand eine Antwort??

    Nuuun.. würdest du 94 durch 10 teilen, hättest du eine lustige Nachkommastelle, mit der du arbeiten könntest :).

    z.B.: gerundeteZahl = Math.round(zahl / 10) * 10;

    Gruss, David

    1. Hallo auch,

      Wie kann ich z.B die Zahl 96 auf 100 aufrunden oder 94 auf 90 abrunden. Bisher habe ich immer nur gesehen, wie so etwas mit Nachkammastellen funktioniert.
      Weiß jemand eine Antwort??

      Nuuun.. würdest du 94 durch 10 teilen, hättest du eine lustige Nachkommastelle, mit der du arbeiten könntest :).

      z.B.: gerundeteZahl = Math.round(zahl / 10) * 10;

      Gruss, David

      Hallo nochmal...

      Wie ist es denn wenn ich weiß ob die Zahl nun im 10er oder 100er oder 1000er Bereich liegt und ich auf den nächsthöheren 10er aufrunden möchte??

      Danke schonwiedernochmal....Alex

      1. Hallo auch,

        Wie kann ich z.B die Zahl 96 auf 100 aufrunden oder 94 auf 90 abrunden. Bisher habe ich immer nur gesehen, wie so etwas mit Nachkammastellen funktioniert.
        Weiß jemand eine Antwort??

        Nuuun.. würdest du 94 durch 10 teilen, hättest du eine lustige Nachkommastelle, mit der du arbeiten könntest :).

        z.B.: gerundeteZahl = Math.round(zahl / 10) * 10;

        Gruss, David

        Hallo nochmal...

        Wie ist es denn wenn ich weiß ob die Zahl nun im 10er oder 100er oder 1000er Bereich liegt und ich auf den nächsthöheren 10er aufrunden möchte??

        Danke schonwiedernochmal....Alex

        Entschuldigung ...Wenn ich NICHT weiss...

        1. Wie ist es denn wenn ich weiß ob die Zahl nun im 10er oder 100er oder 1000er Bereich liegt und ich auf den nächsthöheren 10er aufrunden möchte??
          Entschuldigung ...Wenn ich NICHT weiss...

          Hm, wo ist denn da das Problem? Vielleicht versteh ich dich ja auch falsch, aber mit meiner bereits geposteten Routine sollte das so möglich sein.

          Beispiele:

          Zahl    / 10     round()   * 10
          12      1.2      1         10
          147     14.7     15        150
          9836    983.6    984       9840

          etc...

          Gruss,
            David ;o)

        2. Hallo Alex,

          vielleicht hat David Dein Problem ja schon erschlagen (s.u), dann hat sich meine Frage erledigt.

          Wie ist es denn wenn ich weiß ob die Zahl nun im 10er oder 100er oder 1000er Bereich liegt und ich auf den nächsthöheren 10er aufrunden möchte??

          Danke schonwiedernochmal....Alex

          Entschuldigung ...Wenn ich NICHT weiss...

          Was willst Du genau ? Was meinst Du Mit ...mächsthöheren 10er.. ? Willst du runden oder aufrunden?
          nenn doch mal ein paar Beispiele, so wie es David gemacht hat.

          Gruss

          GerdG

          1. Wie ist es denn wenn ich weiß ob die Zahl nun im 10er oder 100er oder 1000er Bereich liegt und ich auf den nächsthöheren 10er aufrunden möchte??

            Was willst Du genau ? Was meinst Du Mit ...mächsthöheren 10er.. ? Willst du runden oder aufrunden?

            Hmm, stimmt. Er sagte aufrunden. Nun denn, auch nicht schwer. Dafür gibts ceil() und floor() ;).

            Gruss, David.

            PS: Und wenn er nur die erste zahl haben will, wie zb. bei einer 100er-Zahl nur die 1000er oder bei einer 100er-Zahl nur die 100er, dann gehts so:

            var zahl = 4028;
            var maske = Math.pow(10, Math.floor(Math.log(zahl) / Math.LN10));
            var gerundeteZahl = Math.floor(zahl / maske) * maske;

            Gruss,
              David <-- kleiner Mathe-Freak ;)

            1. Hallo David,

              ich wollte ihn eigentlich dazu bringen, das Problem erst mal EXAKT zu formulieren. !!!
              Und nicht alle möglichen Lösungen angeben. :-))  Das hätte ihm, zusammen mit Deinem Vorschlag, vielleicht geholfen selbst auf eine Lösung zu kommen.

              David <-- kleiner Mathe-Freak ;)

              Gruss

              GerdG <-- kleiner Pädagoge ?  ;-)

              PS: Nichts fuer ungut

              1. ich wollte ihn eigentlich dazu bringen, das Problem erst mal EXAKT zu formulieren. !!!
                Und nicht alle möglichen Lösungen angeben. :-))  Das hätte ihm, zusammen mit Deinem Vorschlag, vielleicht geholfen selbst auf eine Lösung zu kommen.

                Ich weiss, ich bin fies :). Nun darf er nichtmal selber knobeln ;). Sorry, ich konnte nicht anders.

                PS: Nichts fuer ungut

                Macht doch nix.

                Gruss,
                  David

                PS: Mein, ich fange nicht schon wieder an, jede Nachricht zu beantworten =).

              2. Hallo David,

                ich wollte ihn eigentlich dazu bringen, das Problem erst mal EXAKT zu formulieren. !!!
                Und nicht alle möglichen Lösungen angeben. :-))  Das hätte ihm, zusammen mit Deinem Vorschlag, vielleicht geholfen selbst auf eine Lösung zu kommen.

                David <-- kleiner Mathe-Freak ;)

                Gruss

                GerdG <-- kleiner Pädagoge ?  ;-)

                PS: Nichts fuer ungut

                Ok, ich hab das falsch erklärt. Davids Routine funktioniert natürlich, aber eigentlich hab ich folgendes Problem:

                Ich bekomme Werte aus einer Datenbank

                • einmal eine Obergrenze (in ein Textfeld)
                • einmal eine Untergrenze (in ein Textfeld)

                beide Felder haben immer den gleichen Wert, zb. 82 oder 154 oder 1032  etc...

                nun versuche ich die Obergrenze auf den nächstgrößeren 10er (also z.B.: 82 auf 90)zu runden und die Untergrenze auf den nächstkleineren 10er (also z.B.: 82 auf 80)
                Da ist mein Problem, denn der Wert in beiden ist ja gleich.

                Danke ....Alex

                1. Da ist mein Problem, denn der Wert in beiden ist ja gleich.

                  Naja, ein Problem seh ich darin immer noch nicht. Aber da du offensichtlich Probelem damit hast, hier nochmal mein Vorschlag ;).

                  var zahl = 82;

                  var obergrenze = Math.ceil(zahl / 10) * 10;
                  var untergrenze = Math.floor(zahl / 10) * 10;

                  eigentlich doch ganz einfach, oder?

                  Gruss,
                    David

                  1. Hi Leuts!

                    Hier noch ein Alternativvorschlag, der vielleicht sogar ein wenig schneller ist, was bei JavaScript aber natuerlich sowieso nicht ins Gewichet faellt.

                    var zahl = 82;

                    var obergrenze = zahl + 10 - zahl % 10;     /*  == untergrenze + 10  */
                    var untergrenze = zahl - zahl % 10;

                    eigentlich doch ganz einfach, oder?

                    Eben.

                    Calocybe

                    P.S. Diesmal schreib ich lieber noch dazu, dass ich das NICHT getestet habe! ;-)

                    1. Hi  Calocybe,

                      Hier noch ein Alternativvorschlag, der vielleicht sogar ein wenig schneller ist, was bei JavaScript aber natuerlich sowieso nicht ins Gewichet faellt.

                      var zahl = 82;

                      var obergrenze = zahl + 10 - zahl % 10;     /*  == untergrenze + 10  */
                      var untergrenze = zahl - zahl % 10;

                      na dann doch gleich:

                      var untergrenze = zahl - zahl % 10;   
                      var obergrenze = untergrenze + 10;

                      so wie Du es in deinem Kommentar ja eigentlich schon vorschlägst :)

                      P.S. Diesmal schreib ich lieber noch dazu, dass ich das NICHT getestet habe! ;-)

                      ebenso UNgetestet !!!

                      so aber jetzt sollten wir Schluss damit machen, bevor wir noch anfangen "Bytes zu spalten" ;-)

                      Gruss

                      GerdG

                      1. so aber jetzt sollten wir Schluss damit machen, bevor wir noch anfangen "Bytes zu spalten" ;-)

                        Wie gemein :). Wo wir doch gerade so schön dem Optimierungswahn verfallen sind.

                        Bis denn,
                          David

                      2. Hi again!

                        na dann doch gleich:

                        var untergrenze = zahl - zahl % 10;   
                        var obergrenze = untergrenze + 10;

                        Ja, Du hast recht. Aber irgendwie hat sich mein Inneres dagegen gewehrt, erst die Untergrenze zu berechnen und dann die Obergrenze, denn jetzt steht oben ja unten und unten oben. ;-) Schon seltsam, was fuer 'nen Duennschiss die Psyche manchmal produziert. *g*

                        so aber jetzt sollten wir Schluss damit machen, bevor wir noch anfangen "Bytes zu spalten" ;-)

                        Na einen hab ich noch. Wie waer's, wenn Alex nicht auf ganze 10er rundet, sondern auf Vielfache von 16? Dann koennte man naemlich folgende coole Moeglichkeit nutzen:

                        untergrenze = zahl & 0xFFFFFFF0;
                        obergrenze = zahl + 0x10;              /* == (zahl + 0x0F) & 0xFFFFFFF0;  */

                        Das wird noch schneller ausgefuehrt, weil jetzt keine Division mehr noetig ist. Gut, ne?
                        Ok, ok, ich hoer ja schon auf... ;-)

                        Calocybe

                        1. hi!

                          var untergrenze = zahl - zahl % 10;   
                          var obergrenze = untergrenze + 10;
                          Ja, Du hast recht. Aber irgendwie hat sich mein Inneres dagegen gewehrt, erst die
                          Untergrenze zu berechnen und dann die Obergrenze, denn jetzt steht oben ja unten und
                          unten oben. ;-)

                          Hä? Dann dreh es doch rum. Was ist das für ein Unterschied, ob du von obergrenze 10 abziehst oder zu untergrenze 10 dazuzählst?

                          bye, Frank!

                          1. Moin Frank,

                            entweder ist es fuer mich noch etwas zu frueh am Morgen, oder bei Dir war es etwas zu spaet in der Nacht ;-)

                            var untergrenze = zahl - zahl % 10;   
                            var obergrenze = untergrenze + 10;
                            Ja, Du hast recht. Aber irgendwie hat sich mein Inneres dagegen gewehrt, erst die
                            Untergrenze zu berechnen und dann die Obergrenze, denn jetzt steht oben ja unten und
                            unten oben. ;-)

                            Hä? Dann dreh es doch rum. Was ist das für ein Unterschied, ob du von obergrenze 10 abziehst oder zu untergrenze 10 dazuzählst?

                            Wir brauchen bei dieser 'Wahnsinns-Optimierung' erst die untergrenze um mit moeglichst wenig Operationen aus zu kommen. sonst sind wir ja wieder da wo Calocybe angefangen hat.
                            Oder habe ich etwas uebersehen ???

                            Hey Calocybe,

                            fuer Dein Unterbewusstsein: So wird im 'logischen ????' Programmablauf von oben noch unten erst das 'unten' und dann das 'oben' berechnet. Genau die Reihenfolg in der man (normalerweise) ein Haus oder so baut. Alles Klar  ;-)
                            Bevor es jetzt von Byte- auf Bit- oder gar Atom-Ebene geht, das ist dann ja eh PAF's Revier :) , beende ich fuer meinen Teil deise 'aeusserst fruchtbare Diskussion' :)))))

                            Bis die Tage

                            GerdG

                          2. Moin!

                            Was fuer ein schoener sonniger Morgen!

                            var untergrenze = zahl - zahl % 10;   
                            var obergrenze = untergrenze + 10;

                            Hä? Dann dreh es doch rum. Was ist das für ein Unterschied, ob du von obergrenze 10 abziehst oder zu untergrenze 10 dazuzählst?

                            Naja, die Untergrenzenberechnung muss ich ja trotzdem zuerst durchfuehren, egal ob obergrenze oben oder unten steht. Muesste also aussehen wie folgt:

                            var obergrenze = zahl - zahl % 10 + 10;
                            var untergrenze = obergrenze - 10;

                            Wie Du siehst ist jetzt, wird jetzt eine zusaetzliche Subtraktion benoetigt, und die auszufuehren, koennte ja schon wieder einen ganzen Prozessortakt kosten. Da kann ja von Optimierung nun keine Rede mehr sein...! ;-)

                            Calocybe

                            P.S. So, und jetzt auf zum See!

  2. Hallo Alex!

    Wie kann ich z.B die Zahl 96 auf 100 aufrunden oder 94 auf 90 abrunden. Bisher habe ich immer nur gesehen, wie so etwas mit Nachkammastellen funktioniert.

    Du kannst die Zahl so oft durch 10 dividieren, bis sie kleiner 1 ist, dann runden und dann entsprechend oft wieder multiplizieren.
    Ist nicht ganz elegant, funktioniert aber!

    Mike

    1. Hey Mike,

      Du kannst die Zahl so oft durch 10 dividieren, bis sie kleiner 1 ist, dann runden und dann entsprechend oft wieder multiplizieren.
      Ist nicht ganz elegant, funktioniert aber!

      Wozu? Teil die Zahl durch 10 und du hast ne Nachkommastelle, mit der du arbeiten kannst. Ganz so, wie ich es bereits geposted hab.
      Man muss sich ja nicht unnötig Arbeit machen ;).

      Gruss,
        David

      1. Hey David,

        Dein Posting war noch nicht da, als ich die Antwort gepostet habe. Deine Lösung arbeitet nur mit Zahlen kleiner 100. Meine rundet allerdings auf die nächste 10er Potenz. Beide Lösungen fordern also noch ein bißchen Nacharbeit. Aber der Gedanke war der gleiche.

        Mike

        Wozu? Teil die Zahl durch 10 und du hast ne Nachkommastelle, mit der du arbeiten kannst. Ganz so, wie ich es bereits geposted hab.
        Man muss sich ja nicht unnötig Arbeit machen ;).