Quersumme
Weil's so grad schön war. Diesmal eine Funktion, um die Quersumme einer Zahl zu ermitteln:
Number.prototype.quersumme = function(forceOneDigit) { var z = this.toString().split(''); for (var i=0, quer=0; i < z.length; quer+=z[i++]-0); if( forceOneDigit && quer > 9) return quer.quersumme(forceOneDigit); return quer; } |
Beispiel
Nachtrag
Und wieder mal gab es zum Thema einen Thread im selfhtml Forum, wo donp eine sehr effektive und schnelle Lösung präsentierte.
Das sieht dann so aus:
Number.prototype.quersumme = function() { return this < 10 ? this : this % 9; } |
ähnliche Artikel
- 18. November 2011 -- LED Editor (1)
LED Scroller Chareditor Dieses Skript dient zum...
- 13. Mai 2009 -- String Erweiterungen (5)
Eine der Eigenschaften von Javascript, die sie von...
- 29. April 2009 -- Online Molmassen Rechner (29)
Ein kleines Javascript aus der Welt der Chemie. Der...
Comments (17)
19531 mal gelesen.
19531 mal gelesen.
17 Kommentare
direkt zum Formular »
Seiten:
30. November 2006: 20:59
Hallo Struppi,
schön wäre eine optionale Rekursion… wenn die zwischensumme nicht einstellig ist, kann man schließlich eine neue Quersumme bilden:
U.U. könnte das so aussehen:
Number.prototype.quersumme = function(forceOneDigit)
{
var z = this.toString().split(“);
for (var i=0, quer=0; i 1)
? Number(quer).quersumme(forceOneDigit)
: quer;
return quer;
}
30. November 2006: 21:12
Joh, hatte ich auch schon:
ich würd’s allerdings so schreiben:
Number.prototype.quersumme = function(forceOneDigit)
{
var z = this.toString().split(“);
for (var i=0, quer=0; i < z.length; quer+=z[i++]-0); if( forceOneDigit && quer > 9) return quer.quersumme();
return quer;
}
30. November 2006: 21:02
// Dein Skript hat meine spitzen Klammern gefressen…
Number.prototype.quersumme = function(forceOneDigit)
{
var z = this.toString().split(“);
for (var i=0, quer=0; i < z.length; quer+=z[i++]-0);
quer = (forceOneDigit && quer.toString().length > 1)
? Number(quer).quersumme(forceOneDigit)
: quer;
return quer;
}
28. Dezember 2006: 12:00
Das würde ja genau zwei Aufrufe erlauben, oder? Sollte man nicht noch den parameter forceOneDigt mit übergeben?
if( forceOneDigit && quer > 9) return quer.quersumme(forceOneDigit);
… allerdings wird das bei sehr großen Zahlen echt lahm, also eher wohl nicht in die Funktion mit hineinbauen.
Grüße,
fester_franz
9. November 2008: 22:50
hallo,
weil man im web2.0 nie zu spät dran ist und ich gerade hierrüber gestolpert bin:
Number.prototype.quersumme = function() {
return this < 10 ? this : this % 9;
}
gibt für alle vielfachen von 9 0 als quersumme zurück. ausserdem gibt die funktion für den fall x<10 eine Number zurück, für alle anderen eine integer.
so:
Number.prototype.quersumme = function() {
return this < 10 ? this : new Number((this % 9) || 9);
}
gibts immer die quersumme als Number.
gruß,
pD
12. Mai 2009: 19:34
Hallo,
Schön, dass man hier meine Quersummenfunktion findet, wusste ich bis jetzt gar nicht.
Es ist aber nicht die beste Version.
Ursprünglich ging sie einfach so (für’s Dezimalsystem):
function qs(n) {return n%9||9}
Das funktioniert.
Wenn man immer ein Primitive zurückgeben will, einfach
+(n%9||9)
notieren, oder wenn man immer ein Objekt haben will, einfach
Number(n%9||9)
zurückgeben.
Gruß, donp
24. Juni 2011: 14:42
Diese letzte Version ist ja sehr schön, liefert für den Wert 0 jedoch die Quersumme 9, was ja nicht so ganz stimmt (ok, wer will schon die Quersumme von 0 haben… ;-)
Wie wär’s mit:
return n == 0 ? 0 : (n%9 || 9);
24. Juni 2011: 20:28
Wie kommst du darauf?
Bei mir kommt Null raus, wie’s sein muss.
24. Januar 2013: 18:49
Fehler im Skript??
Wollte mit dem Skript die QS von „2 hoch 63“ berechnen. Die Zahl lautet 9223372036854775808.
Als Ergebnis kommt 74 anstatt 89.
Hintergrund hierzu war das Lösen der Geocaching-Aufgabe hier:
http://www.geocaching.com/seek/cache_details.aspx?wp=GC3CT1Z
24. Januar 2013: 20:12
Das liegt daran, dass JS nicht mit so grossen Zahlen rechnen kann. Aus deiner Zahl wird:9223372036854776000 und davon ist die Quersumme 74. Was die genaue Ursache ist, muss ich noch recherchieren
26. Januar 2013: 22:59
9223372036854776000
Das sind die für Double Precision üblichen 16 Stellen.
27. Januar 2013: 12:06
So spart man sich das recherchieren, Danke ;-)
1. Oktober 2013: 16:28
versucht mal eine Gleitkommazahl einzugeben. Ausgegeben wird: NaN. Diesen Fall müsstest du noch abfangen. Ich wüsste wie, aber ich bin zu TOLL, um dir das zu sagen.
1. Oktober 2013: 19:01
Wieso sollte ich das tun?
Der Code soll nur demonstrieren wie es geht. Eine Überprüfung einer falschen Eingabe muss derjenige einbauen, der den Code benutzen möchte.
31. Juli 2019: 12:46
Und wie soll diese Methode denn Quersummen über 9 berechnen? Bei `r = x % 9` kann r maximal 8 sein. Wendet man die Funktion auf Zahlen wie 47 an (deren Quersumme größer als 8 ist) liefert sie in diesem Fall eine um 9 zu kleine Zahl.
Ich würde einen etwas längeren, rekursiven Ansatz bevorzugen, hier mal in kompakt:
`q = x => x<10 ? x : q(parseInt(x/10)) + x%10;`
31. Juli 2019: 13:18
Die Quersumme von 47 ist entweder 2 oder 11 wird beides so von meiner Funktion berechnet.
26. Dezember 2021: 0:08
IM folgendem Beispiel soll die Quersumme von a errechnet werden und in b abgelegt werden. Wenn bei Modulo 9 den Wert 0 ergibt ist es 9 ansonsten, der Modulo 9 Wert.
var a = 290;
var b;
if (a%9 == 0) b = 9; else b = a%9;