Der Niederrheiner: Neuling: Komma und zweistellig mit kfm. Runden

Beitrag lesen

Hallo,

function kommazupunkt(zahl) {

zahl=zahl.toString();
    zahl=zahl.replace(/,/,".");
    zahl=parseFloat(zahl);
    return zahl;
  }


>   
> diese Funktion ist sinnlos. Anscheinend erwartet sie einen Zahlenwert.  
  
Das ist nicht richtig. Im Start-Post wurde um Antwort gebeten, ob mann Werte mit KOMMA, und nicht mit US-Zahlen-PUNKT, verarbeiten kann. Daher macht die Function Sinn.  
  
Eine Zahl mit KOMMA würde in einer Berechnung crashen, daher der Tausch Komma gegen Punkt.  
Die Umwandlung toString muss sein, da funktionen wie search oder replace nur auf String angewendet werden können. Eine korrekte, punkt getrennte Zahl würde ohne also zum Crash führen !  
  
  
Den wandelt sie dann in einen String um (mit beliebig vielen Dezimalstellen), ersetzt in diesem String dann Kommas durch Punkte (obwohl ein Komma in diesem String gar nicht vorkommen kann), und versucht dann den String wieder als Zahl zu interpretieren. Das Ergebnis sollte also wieder der ursprüngliche Zahlenwert sein. Mit anderen Worten: Die Funktion tut nichts, was man irgendwie feststellen könnte.  

>   
> > ~~~javascript

function perc1() {  

> >     r=document.getElementById("rabatt1").value;  
> >     s=document.getElementById("summe1").value;  
> >     r=kommazupunkt(r);  
> >     s=kommazupunkt(s);  
> >     erg=s*(r/100);  
> >     document.getElementById("euro1").value = erg.toFixed(2);  
> >   }

Hier rufst du kommazupunkt() mit Strings als Argument auf; es erscheint mir aber witzlos, toString() auf einen String anzuwenden. Ich bin mir nicht mal sicher, ob toString() für Strings überhaupt implementiert ist.

Woher weisst Du, ob im Eingabefeld ein String steht ?

Nenn doch deine erste Funktion ParseStringToFloat(), und lass den Aufruf von toString() am Anfang einfach weg. Dann ergibt sie nämlich Sinn: Das Argument ist die String-Darstellung eines Zahlenwertes, wahlweise mit Punkt oder Komma als Dezimalzeichen, und das Ergebnis ist der tatsächliche Zahlenwert.

Man kann den Code natürlich noch schöner verschachteln, aber so ist er für einen newbie besser lesbar (hoffe ich)

Das ist fraglich. Für mich (Programmierer seit fast 30 Jahren) sind zwei verschachtelte Funktionsaufrufe leichter nachvollziehbar, als wenn sich der Typ einer Variablen plötzlich ändert. Muss jeder selbst wissen ...

Ciao,
Martin