2016-05-23 11 views
0

Ich habe ein einfaches Javascript erstellt, das einen Betrag multipliziert und das Ergebnis anzeigt. Ich möchte jedoch das Ergebnis auf 2 Dezimalstellen beschränken. Ich habe versucht, toFixed zu verwenden, aber das scheint nicht zu funktionieren.Begrenzen Sie das Multiplikationsergebnis auf 2 Dezimalstellen.

Weiß jemand, wie man das funktioniert?


function MultiplyTheAmount() { 
 
\t var multiplier = 0.75; 
 
\t var roundedMultiplier = multiplier.toFixed(2); 
 
\t document.getElementById('multiplyResult').innerHTML = document.getElementById('multiplyAmount').innerHTML * roundedMultiplier; 
 
}; 
 
MultiplyTheAmount();
<ul style="list-style:none;"> 
 
    <li>Amount:</li> 
 
    <li id="multiplyAmount">119.99</li> 
 
    <li><br/></li> 
 
    <li>Multiply by:</li> 
 
    <li>0.75</li> 
 
    <li><br/></li> 
 
    <li>Result:</li> 
 
    <li id="multiplyResult"></li> 
 
</ul>

Antwort

1

Übernehmen Sie die toFixed Methode zum Endergebnis der vergrößerte zu beseitigen floating point inaccuracy Sie sehen:

function MultiplyTheAmount() { 
 
    var multiplier = 0.75; 
 
    var roundedMultiplier = multiplier.toFixed(2); 
 
    document.getElementById('multiplyResult').textContent = ( 
 
     +document.getElementById('multiplyAmount').textContent * roundedMultiplier 
 
    ).toFixed(2); 
 
}; 
 
MultiplyTheAmount();
<ul style="list-style:none;"> 
 
    <li>Amount:</li> 
 
    <li id="multiplyAmount">119.99</li> 
 
    <li><br/></li> 
 
    <li>Multiply by:</li> 
 
    <li>0.75</li> 
 
    <li><br/></li> 
 
    <li>Result:</li> 
 
    <li id="multiplyResult"></li> 
 
</ul>

nicht auf die Frage bezogen, aber ich würde die Verwendung von textContent statt innerHTML was darauf hindeutet, wenn sie nicht mit HTML Inhalt zu tun.

+0

Und es sollte auch vorgeschlagen werden, 'document.getElementById ('multiplyResult')' in einer Variablen zu speichern, um den doppelten Zugriff zu vermeiden. – andlrc

+1

@andlrc, auf dieses Element wird nur einmal zugegriffen. Die andere Referenz ist "multiplyAmount", nicht "multiplyResult". – trincot

+0

Danke für die ausführliche Antwort @trincot, deine Lösung funktioniert :) Ich benutze jetzt anstelle von innerHTML auch textContent. – Macchiato

2

Sie müssen das Endergebnis begrenzen 2 Dezimalstellen haben:

(document.getElementById('multiplyAmount').innerHTML * roundedMultiplier).toFixed(2); 
+0

Ich musste an der falschen Stelle, das ist viel besser, danke! :) – Macchiato