Javascript ist Toll!

19. May 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. May 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)
2040 mal gelesen.

14 Kommentare

Leave a comment »

Seiten:

1. Comment 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. Comment 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. Comment 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. Comment von: fester_franz
28. December 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. Comment 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. Comment von: donp
12. May 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. Comment von: wexman
24. June 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. Comment von: Struppi
24. June 2011: 20:28

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

9. Comment von: Otto K.
24. January 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. Comment von: Struppi
24. January 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. Comment von: Jürgen
26. January 2013: 22:59

9223372036854776000

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

12. Comment von: Struppi
27. January 2013: 12:06

So spart man sich das recherchieren, Danke ;-)

13. Comment von: Hallo
1. October 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. Comment von: struppi
    1. October 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.

Leave a comment

Name (required)
Mail (wird nicht angezeigt) (required)
Website

Folgende HTML Tags sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>



Powered by WordPress Stop Spam Harvesters, Join Project Honey Pot kostenloser Counter Browser-Statistiken
rats-wonderful
rats-wonderful
rats-wonderful
rats-wonderful