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;
}
Comments (6)
10786 mal gelesen.

6 Kommentare Einen Kommentar hinterlassen »

Kommentare

1. Kommentar 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. Kommentar 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. Kommentar 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. Kommentar 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. Kommentar 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. Kommentar 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

Einen Kommentar hinterlassen

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


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