Verzweifele an toFixed(2)
Gwagne
- javascript
Hallo,
ich habe ein vorgegebenes Script etwas edititert um damit eine kleine Rechnung durchführen zu können, aber leider scheitere ich nun seit geschlagenen zwei Stunden daran, dass in dem Ausgabefeld nur zwei Nachkommastellen angezeigt werden.
Wie genau muss ich toFixed(2) einbauen, damit es in diesem Script klappt?
Kann mir noch jemand sagen ob es eine Möglichkeit gibt in die Rechenfelder anstatt einen Punkt auch ein Komma eingeben zu können, also 10,5 anstelle von 10.5???
Danke.
<!-- Script-Anfang -->
<!-- Ein Rechenscrip -->
<!-- Headcode -->
<script>
function startCalc(){
interval = setInterval("calc()",1);}
function calc(){
one = document.autoSumForm.firstBox.value;
two = document.autoSumForm.secondBox.value;
three = document.autoSumForm.thirdBox.value;
document.autoSumForm.fordBox.value = (one * 1) - (two * one * 0.005) - (one * 1 - two * one * 0.005) * 0.04 - (one * 1 - three * one * 0.01);}
function stopCalc(){
clearInterval(interval);}
</script>
<!-- Diesen Code musst Du in den -body- einbauen -->
<form name="autoSumForm">
<P>Preis: <input type=text name="firstBox" value="" size="5"> Euro</P><BR>
<P>Großhandelsnachlass: <input type=text name="secondBox" value="" size="2"> %</P><BR>
<P>Rabatt: <input type=text name="thirdBox" value="" size="2"> %</P><BR><BR><input type="button" value="Berechne"
onclick="startCalc();" onBlur="stopCalc();">
<BR>
<P>Endsumme: <input type=text name="fordBox" size="5"> Euro</P>
</form>
<!-- Script-Ende -->
<!-- Das wars dann auch schon -->
Hallo Gwagne,
Wie genau muss ich toFixed(2) einbauen, damit es in diesem Script klappt?
was an http://de.selfhtml.org/javascript/objekte/number.htm#to_fixed hast du denn nicht verstanden?
Kann mir noch jemand sagen ob es eine Möglichkeit gibt in die Rechenfelder anstatt einen Punkt auch ein Komma eingeben zu können, also 10,5 anstelle von 10.5???
ich mache das so, dass ich Eingabefelder mit http://de.selfhtml.org/javascript/objekte/number.htm#nan überprüfe und wenn es keine Zahl ist, ersteze ich das Komma durch einen Punkt (http://de.selfhtml.org/javascript/objekte/string.htm#replace, replace(/,/g,".")). Wenn es dann immer noch keine Zahl ist, kommt ein alert("Ne Zahl, kein Aufsatz!");.
Gruß, Jürgen
Also so weitreichend sind meine Java-Kenntnisse dann doch leider nicht.
Hab es mal so probiert, aber leider kommt dabei nix raus:
...
three = document.autoSumForm.thirdBox.value;
if (three ! = Number.NaN)
threeKomma = three.replace(/,/g,".");
...
Hallo,
Wie genau muss ich toFixed(2) einbauen, damit es in diesem Script klappt?
Du kannst z.B. eine zusätzliche Variable einführen und die vor der Übergabe
-ggf. mehrfach- entspr. bearbeiten, etwa so:
neuvar = 3+5;
neuvar = neuvar.toFixed(2);
document.autoSumForm.fordBox.value = neuvar;
Vielleicht ist ja das Beispiel noch interessant:
http://www.lipfert-malik.de/webdesign/tutorial/bsp/toFixed-4all.html
Grüsse
Cyx23
Klappt leider nicht.
Liegt aber wohl daran, dass ich es falsch einbaue:
...
document.autoSumForm.neuvar.value = neuvar
neuvar = (one * 1) - (two * one * 0.005) - (one * 1 - two * one * 0.005) * 0.04 - (one * 1 - three * one * 0.01);
neuvar = neuvar.toFixed(2);}
function stopCalc(){
....
<BR>
<P>Endsumme: <input type=text name="neuvar" size="5"> Euro</P>
....
Hallo,
Klappt leider nicht.
Liegt aber wohl daran, dass ich es falsch einbaue:
der Code sieht m.E. allerdings etwas merkwürdig aus.
Da fehlt ein ";".
Dann halte ich es für irritierend, wenn eine Hilfs-Variable den gleichen
Namen hat wie das Formularfeld.
Ausserdem ist womöglich die Reihenfolge der Schritte nicht richtig.
document.autoSumForm.neuvar.value = neuvar
Soll hier das Formularfeld einen Wert erhalten?
Grüsse
Cyx23
Danke für die schnelle Antwort und die kritischen Anmerkungen.
Hab es noch mal umgestellt und so funktioniert es:
...
neuvar = (one * 1) - (two * one * 0.005) - (one * 1 - two * one * 0.005) * 0.04 - (one * 1 - three * one * 0.01);
neuvar = neuvar.toFixed(2);
document.autoSumForm.fordbox.value = neuvar;}
...
Das Ergebnis von "neuvar" wird dann in einem Textfeld "fordbox" ausgegeben.
Jetzt hab ich auch noch direkt noch rausbekommen, wie ich die Eingabe von Kommas in den Textfeldern erlauben kann :-):
...
one = document.autoSumForm.firstBox.value;
oneK = one.replace(/,/g,".");
two = document.autoSumForm.secondBox.value;
twoK = two.replace(/,/g,".");
three = document.autoSumForm.thirdBox.value;
threeK = three.replace(/,/g,".");
...
Vielen Dank für Eure Hilfe!
Eine Kleinigkeit klappt doch nicht so ganz, nämlich die Ausgabe in dem Textfeld.
...
neuvar = (oneK * 1) - (twoK * oneK * 0.005) - (oneK * 1 - twoK * oneK * 0.005) * 0.04 - (oneK * 1 - threeK * oneK * 0.01);
neuvarK = neuvarK.toFixed(2);
neuvarK = neuvar.replace(/,/g,".");
document.autoSumForm.fordbox.value = neuvarK;}
...
Wieso funktioniert hier "neuvarK = neuvar.replace(/,/g,"."); "
nicht genau so wie bei der Eingabe???
Es wird also immer noch ein Punkt statt ein Komma im Ausgabefeld dargestellt.
Hallo Gwagne,
Wieso funktioniert hier "neuvarK = neuvar.replace(/,/g,"."); "
nicht genau so wie bei der Eingabe???
tut es doch, hier wird ein (nicht vorhandenes) Komma durch einen Punkt ersetzt.
Es wird also immer noch ein Punkt statt ein Komma im Ausgabefeld dargestellt.
Richtig, du musst ja auch nach dem Punkt suchen, und ihn durch ein Komma ersetzen. Schau dir mal die Bedeutung der beiden Parameter von replace an.
Gruß, Jürgen
Hallo,
klingt logisch funktioniert aber leider nicht...
neuvarK = neuvar.replace(/./g,",");
Als Ergenis werden da alle Zahlen in Kommas übersetzt, so lautet das Ergebnis z.B.: ",,,,,,,"
Gruß
Gwagne
Hallo,
neuvarK = neuvar.replace(/./g,",");
lass das gloabl-g einfach weg.
neuvar = 3+5;
neuvar = neuvar.toFixed(2).replace('.',',');
document.autoSumForm.fordBox.value = neuvar;
Grüsse
Cyx23
Vielen Dank.
So hat es beim zweiten Versuch funktioniert.
Hab es erst so probiert, ging aber nicht.
neuvarK = neuvar.replace(/./,",");
Mit dem Befehl hat es dann aber geklappt.
neuvarK = neuvar.replace('.',',');
Kann ich in die gleiche Zeile noch einen Befehl einfügen, dass bei einer negativen Zahl eine 0 ausgegeben wird, oder ist das nur über einen If-Befehl realisierbar?
Gruß
Gwagne
Hallo,
Kann ich in die gleiche Zeile noch einen Befehl einfügen, dass bei einer negativen Zahl eine 0 ausgegeben wird, oder ist das nur über einen If-Befehl realisierbar?
schau dir mal die verfügbaren mathematischen Methoden an, z.B. "Math.max()".
Ansonsten wäre "if" aber doch wohl auch Problem?
Und notfalls vmtl. auch in anderer Schreibweise ( ? : )in eine Zeile zu bringen.
Grüsse
Cyx23
Okay. MathMax scheint dafür geeignet zu sein.
Kann man in diese Funktion auch direkt Zahlen und Variablen eingeben?
In etwa so, dass die Funktioon direkt die Zahl 0 mit dem Wert der Variablen speichert?
neuvarM = Math.max(0, neuvarK);
Oder muss ich wie im Beispiel auf selfhtml vorgehen und die Zahlen über ein Eingabefeld einspielen?
Math.max(Test.z1.value, Test.z2.value);
Gruß
Gwagne
Hallo,
Okay. MathMax scheint dafür geeignet zu sein.
sollt vorher natürlich lauten:
Ansonsten wäre "if" aber doch wohl auch _kein_ Problem?
Kann man in diese Funktion auch direkt Zahlen und Variablen eingeben?
("Self") ausprobieren oder Grundlagen lernen.
Grüsse
Cyx23
Der Selbsttest hat ergeben, dass man Zahlen auch direkt einbauen kann:
input type="button" value="=" onclick="Test.Aus.value = Math.max(0, Test.z2.value)
Leider hat es aber noch nicht mit der Umsetzung geklappt, daher werd ich mich jetzt wirklich mal den Grundlagen widmen.
Vielen Dank für die Hilfe.
Gruß
Gwagne
neuvarK = neuvar.replace(/./g,",");
lass das gloabl-g einfach weg.
nein, maskiere das Zeichen '.' es stellt in einem Regulären Ausdrück einen Platzhalter für ein x-beliebiges Zeichen dar.
Struppi.