Aufrunden / Abrunden
Alexander
- javascript
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
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 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
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...
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)
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
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 ;)
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
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 =).
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
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
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
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! ;-)
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
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
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
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!
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
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!
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
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
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 ;).