Javascript ist Toll!

FAQ > Javascript

19. Mai 2006 - 23:56

Quersumme

Weil's so grad schön war. Diesmal eine Funktion, um die Quersumme einer Zahl zu ermitteln:

javascript
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:

javascript
Number.prototype.quersumme = function() {
    return this < 10 ? this : this % 9;
}

Ähnliche Artikel

Comments (8)
20519 mal gelesen.

8 Comments

Einen Kommentar hinterlassen »

Kommentare

1. von fester_franz
Donnerstag 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. von Struppi
Donnerstag 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. von fester_franz
Donnerstag 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. von fester_franz
Donnerstag 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. von pother_dane
Sonntag 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. von donp
Dienstag 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. von wexman
Freitag 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. von Struppi
Freitag 24.Juni 2011: 20:28

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

Einen Kommentar hinterlassen

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

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



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