Javascript ist Toll!

19. Mai 2006 - 23:56

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

Deine Zahl:

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 (14)
5586 mal gelesen.

14 Kommentare

Leave a comment »

Seiten:

1. Kommentar von: fester_franz
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;
}

2. Kommentar von: Struppi
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;
}

3. Kommentar von: fester_franz
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;
}

4. Kommentar von: fester_franz
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

5. Kommentar von: pother_dane
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

6. Kommentar von: donp
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

7. Kommentar von: wexman
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);

8. Kommentar von: Struppi
24. Juni 2011: 20:28

Wie kommst du darauf?
Bei mir kommt Null raus, wie’s sein muss.

9. Kommentar von: Otto K.
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

10. Kommentar von: Struppi
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

11. Kommentar von: Jürgen
26. Januar 2013: 22:59

9223372036854776000

Das sind die für Double Precision üblichen 16 Stellen.

12. Kommentar von: Struppi
27. Januar 2013: 12:06

So spart man sich das recherchieren, Danke ;-)

13. Kommentar von: Hallo
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.

    14. Kommentar von: struppi
    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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Powered by WordPress Stop Spam Harvesters, Join Project Honey Pot
rats-wonderful
rats-wonderful
rats-wonderful
rats-wonderful