• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Ergebnis einer Funktion auf 2 Nachkommastellen runden

AndreasZ

New member
Hallo zusammen,

ihr seid meine letzte Hoffnung. Ich habe mir mit meinen Anfängerkentnissen eine Funktion zusammengestellt die 5 Eingabevariablen verarbeitet. Nun möchte ich aber, dass das Ergebnis das im Textfeld "summe" ausgegeben wird auf 2 Nachkommastellen gerundet ausgegeben wird.

HTML:
 	function berechne(){
 	prüfen ();
 	if (val == true) {
 	document.getElementById("summe").value=
 	document.getElementById("a").value/
 	1000*
 	document.getElementById("b").value*
 	document.getElementById("c").value*
 	document.getElementById("d").value*
 	document.getElementById("e").value;
	}
	}
--------------------

HTML:
	<tr>
		<td><span class="center">Ersparnis:</span></td>
		<td><input type="text" name="summe" id="summe" /><span class="center">pro Jahr</span></td>
		<td><input type="button"  value="berechnen" onclick="javascript:berechne();"/></td>
	</tr>
--------------------

Habe schon mit Math.round() und/oder toFixed() etc. rumprobiert. Wenn ich das aber mache, zerschiese ich meine ganze Funktion und wenn ich auf berechnen drücke passiert nichts mehr. Auch unzählige Beispiele die ich im Internet gefunden habe brachten mich der Lösung nicht näher.


Vielen Dank im Vorraus!
 
Zuletzt bearbeitet von einem Moderator:
Hast Du es schon so versucht?:
Code:
function berechne(){
    prüfen ();
    if (val == true) {
    intval = document.getElementById("a").value/1000*
        document.getElementById("b").value*
        document.getElementById("c").value*
        document.getElementById("d").value*
        document.getElementById("e").value;
    intval = Math.round(intval * 100) / 100;
    document.getElementById("summe").value = intval;
    }
}
Es funktioniert natürlich auch mit einem Einzeiler, aber Zwischenergebnisse machen den Code besser lesbar.
 
30 Minuten nach der Frage schon beantwortet, und das mitten in der Nacht. ;)
Ich habs auf diese Art probiert bin aber grandios gescheitert. Funktioniert jetzt wunderbar! Vielen Dank!

Jetzt habe ich doch noch eine "kleine" weitere Frage. Habe in der Zwischenzeit ja noch weiterhin versucht das Problem zu lösen und bin dabei auf eine weitere Sache gestoßen.
Und zwar erfolgt die Ausgabe ja mit einem "Punkt" als Dezimalzeichen anstelle eines "Kommas". Nun habe ich mich soweit eingelesen, dass man diese vor der Textausgabe tauschen kann.
Aber auch hier stoße ich irgendwie an meine Grenzen. Das Problem ist stets das selbe wie beim alten Problem, welches ich ja nun Dank deiner Hilfe lösen konnte - ich bekomme kein Ergebnis mehr im Ausgabefeld.
 
Andreas, ein ganz wichtiges Element bei der Webprog. ist die Konsole des Browsers mit F12. Ganz oft kommt man durch die dortigen Meldungen der Lösung näher. Und zum Erlernen kann ich nach wie vor wärmstens das SelfHTML empfehlen. Da ist für jedes Kommando mind. ein Beispiel dabei.
Das Ersetzen des Punktes würde ich mit einer kurzen Regex machen: SELFHTML: JavaScript / Objektreferenz / RegExp
Wobei ich gerade selbst sagen muss, dass das SelfHTML in Sachen Regex mit JS ziemlich rein haut und von Anfang an ganz ungewohnt umfangreich ist. Sonst fängt es meistens seicht an und steigert sich später. Na ja, du solltest es trotzdem wenigstens mal überfliegen, um die Möglichkeiten mal gesehen zu haben.
Zu deiner Frage findest du konkrete Lösungen über Google mit "js punkt komma tauschen". Es gibt - wie meisten - 100 Wege. Such dir einen aus. Ich würde ein Regex nehmen. Aber nur, weil mir das ohnehin von Perl her liegt und ich noch immer nicht alle JS Kommandos kenne :)

Und wenn du nächstes mal Code postest, umschließe diesen doch bitte mit HTML-, CODE- oder INLINE-Tags, damit er richtig dargestellt und ausgezeichnet wird.
 
Für das Ändern von Komma in Punkt braucht man keine RegExp:
Code:
var input, inputConverted;
input = "1,23";
inputConverted = parseFloat(input.replace(",", "."), 10);
alert(inputConverted + " - type:" + typeof inputConverted);

- - - Aktualisiert - - -

PS: Runden in JS ist so eine Sache für sich - les dir doch einfach mal z.B. diesen Thread durch.
Oder probier mal folgendes:
Code:
var i = 2;
alert(i.toFixed(20)); //2 auf 20 Stellen gerundet
 
Zuletzt bearbeitet:
Danke schon mal für eure Hilfestellung, ich habe nun nach einer langen Nacht und wenig Schlaf soeben nochmal versucht das Problem mit euren Tipps zu lösen. Ich komme leider nicht weiter:

Das Runden funktioniert mit der Lösung von Sempervivum wunderbar.

HTML:
function berechne(){
    prüfen ();
    if (val == true) {
    intval = document.getElementById("a").value/1000*
        document.getElementById("b").value*
        document.getElementById("c").value*
        document.getElementById("d").value*
        document.getElementById("e").value;
    intval = Math.round(intval * 100) / 100;
    document.getElementById("summe").value = intval;
    }
}


Wenn ich jetzt versuche den Punkt durch das Komma zu ersetzen, dann bekomme ich keine Lösung im Textausgabefeld. Habe es sowohl mit selfHTML als auch den Tipps hier versucht. ;)
Bitte nicht lachen... :p

Versuch 1:

HTML:
function berechne(){
    prüfen ();
    if (val == true) {
    intval = document.getElementById("a").value/1000*
        document.getElementById("b").value*
        document.getElementById("c").value*
        document.getElementById("d").value*
        document.getElementById("e").value;
    intval = Math.round(intval * 100) / 100;
    var nachher = intval.replace(/./,",");
    document.getElementById("summe").value = nachher;
    }
}


Versuch 2:

HTML:
function berechne(){
    prüfen ();
    if (val == true) {
    intval = document.getElementById("a").value/1000*
        document.getElementById("b").value*
        document.getElementById("c").value*
        document.getElementById("d").value*
        document.getElementById("e").value;
    intval = Math.round(intval * 100) / 100;
    var nachher = intval.replace(".", ",");
    document.getElementById("summe").value = nachher;
    }
}


Versuch 3:

HTML:
function berechne(){
    prüfen ();
    if (val == true) {
    intval = document.getElementById("a").value/1000*
        document.getElementById("b").value*
        document.getElementById("c").value*
        document.getElementById("d").value*
        document.getElementById("e").value;
    intval = Math.round(intval * 100) / 100;
        var input, inputConverted;
        input = intval;
        inputConverted = parseFloat(string.replace(".", ","), 10);
        alert(inputConverted + " - type:" + typeof inputConverted);
    document.getElementById("summe").value = inputConverted;
    }
}


Ich bin in JS wohl einfach noch nicht soweit, um das zu kapieren. Wo liegt mein Fehler. Warum schaffe ich es nicht, die zahlreichen Beispiele auf mein Problem zu übertragen?
 
Dein 1. Versuch ging schon in die richtige Richtung. Du musst nur noch zwei Dinge bedenken:
1. replace() kann nur auf einen String arbeiten, du musst deinen Wert mit Hilfe der Funktion toString in einen String umwandeln.
2. Der Punkt hat eine besondere Bedeutung in Regular Expressions und steht für "irgendein Zeichen". Daher musst Du den Punkt escapen: /\./
So funktioniert's:
Code:
var nachher = intval.toString().replace(/\./,",");
 
Danke! Zwei keine Fehler und nichts geht. Wobei eigentlich reicht ja schon einer. :p
Werde mir das für die Zukunft merken.
 
Wie immer, wenn es um Geld geht, meine Warnung: rechne immer mit der kleinsten Einheit (also bei uns mit Cent und nicht in Euro), denn das Zahlenformat, das in JS verfügbar ist, kann die meisten Dezimalzahlen nur genähert repräsentieren, wodurch es schnell mal zu unerwarteten Ergebnissen kommen kann:
Code:
var a = 0.1;
var b = 0.2;
alert(0.3 - a - b);

Aber Ganzzahlen werden exakt repräsentiert. Deswegen sollte man die immer verwenden, wenn es um Geld geht, da die Leute da schnell verärgert sind, auch wenn das Ergebnus nur um einen Cent daneben liegt.

Deswegen: Eingaben in Cent umrechnen. Operationen ausführen. Ergebnis runden und Ausgabe entsprechend dem gewünschten Format erstellen.

PS: das "javascript:" im onclick ist unnötig.
@Sempervivum: warum arbeitest du eigentlich immer mit dem *100/100-Ansatz und nicht mit .toFixed()? Denn der "gerundete" Wert ist ja wieder dezimal und deswegen auch nur wieder eine Näherung.
 
Zurück
Oben