toFixed


Jofre

Erfahrenes Mitglied
Ich bekomme die Fehlermeldung:

TypeError: anz.toFixed is not a function

Aufruf

{reaktionsZeit =plusMinus(reaktionsZeit,0.25,0.5, 10);}


Code:
function plusMinus(ausgang,delta,unten,oben)
{
        // Mehr oder weniger Zeit zum Suchen
        let anz=ausgang;
        if ((anz + delta)< oben && delta>0)
        {anz=anz + delta; }
        if ((anz + delta)> unten && delta<=0)
        {anz=anz + delta; }           
        anz=anz.toFixed(2);
        return anz;
}
 

Sempervivum

Erfahrenes Mitglied
Da Du nur Vergleiche und Additionen auf den Parameter ausgang anwendest ist stark zu vermuten, dass deine Variable reaktionsZeit vom Typ String ist. Wende parseInt() oder parseFloat() darauf an und es sollte funktionieren.
 

Jofre

Erfahrenes Mitglied
Verstehe ich nicht.

ich habe als Startwert definiert:

var reaktionsZeit=2;

Und wenn ich nach Ausführung der obigen Funktion schreibe:

meldung(reaktionsZeit.toFixed(2) + " Sek.","normal","16","Arial","#5a617b",340 ,440);

dann bringt es auch die reaktionsZeit mit 2 Nachkommastellen.
 

Sempervivum

Erfahrenes Mitglied
Du schreibst "als Startwert" - werden darauf im weiteren Verlauf noch irgend welche Rechenoperationen angewendet?
 

Jofre

Erfahrenes Mitglied
nein.

Er geht über den Aufruf
reaktionsZeit =plusMinus(reaktionsZeit,0.25,0.5, 10);}
in die Funktion plusMinus(...) rein.
und wird dort, wenn die Funktion aufgerufen wird, verändert und dann angezeigt über meldung(...)
 

Sempervivum

Erfahrenes Mitglied
Dann verstehe ich es nicht. Dieser Code funktioniert bei mir ohne Fehlermeldung:
Code:
        var reaktionsZeit = 2;
        reaktionsZeit = plusMinus(reaktionsZeit, 0.25, 0.5, 10);
        console.log(reaktionsZeit);
        function plusMinus(ausgang, delta, unten, oben) {
            // Mehr oder weniger Zeit zum Suchen
            let anz = ausgang;
            if ((anz + delta) < oben && delta > 0) { anz = anz + delta; }
            if ((anz + delta) > unten && delta <= 0) { anz = anz + delta; }
            anz = anz.toFixed(2);
            return anz;
        }
Füge ich dagegen einen zweiten Aufruf hinzu, kommt es zum Fehler, denn dann ist reaktionsZeit ein String:
Code:
        var reaktionsZeit = 2;
        reaktionsZeit = plusMinus(reaktionsZeit, 0.25, 0.5, 10);
        console.log(reaktionsZeit);
        reaktionsZeit = plusMinus(reaktionsZeit, 0.25, 0.5, 10);
        console.log(reaktionsZeit);
        function plusMinus(ausgang, delta, unten, oben) {
            // Mehr oder weniger Zeit zum Suchen
            let anz = ausgang;
            if ((anz + delta) < oben && delta > 0) { anz = anz + delta; }
            if ((anz + delta) > unten && delta <= 0) { anz = anz + delta; }
            anz = anz.toFixed(2);
            return anz;
        }
 

Sempervivum

Erfahrenes Mitglied
Code:
        var reaktionsZeit = 2;
        // hier ist reaktionsZeit vom Typ Number
        reaktionsZeit = plusMinus(reaktionsZeit, 0.25, 0.5, 10);
        console.log(reaktionsZeit);
        // in plusMinus wird toFixed auf den Wert angewendet
        // dieses liefert einen String zurück
        // daher ist jetzt reaktionsZeit ein String
        // im folgenden Aufruf von plusMinus kommt es daher zum Fehler
        reaktionsZeit = plusMinus(reaktionsZeit, 0.25, 0.5, 10);
 

Sempervivum

Erfahrenes Mitglied
Am besten für interne Berechnungen mit den Number-Werten arbeiten und toFixed nur anwenden, wenn etwas an den Benutzer ausgegeben oder angezeigt werden soll.