2017-10-09 2 views
-2

Ich habe ein bisschen JavaScript, das ich verwende, um einen prozentualen Rabatt auf ein Formularfeld zu berechnen, das einen Gesamtwert enthält.Javascript Berechnungen von Prozentsätzen sind aus

var thirteen = 10; 
 
var percent_discount = (thirteen) * 0.01; 
 
var percent_discount_final = (382.50 * (percent_discount)); 
 
console.log(percent_discount_final.toFixed(2));

Die Berechnung wird bei 38.24 ausgegeben ??

Warum passiert das?

enter image description here

+1

Probieren Sie 'percent_discount_final = Math.round (Wert von einigen Formularfeld * Prozent Rabatt);' –

+0

Das funktioniert nicht. Wenn meine Summe 382,50 ist und ich 10% davon kalkuliere, zeigt es das Ergebnis als 38,20 –

+1

'(10 * 0,01 * 382,50) .toFixed (2)' - das gibt 38,25 auf der Konsole zurück, habe es gerade versucht –

Antwort

0

Nun, sollte der volle Wert minus der Rabatt sein - dritte Zeile Wesen:

var percent_discount_final = value_of_some_form_field - (value_of_some_form_field * percent_discount); 
0

Sie fast den richtigen Multiplikator herausgefunden, aber Sie vergessen haben, von 1 zu subtrahieren, so dass Sie multipliziert mit 0.1 anstelle von 0.9.

Hier ist ein Beispiel, wie jeder Prozentsatz von einer Zahl subtrahiert wird.

const subtractPercent = (value, percentage) => { 
    const multiplier = 1 - (percentage/100); 
    return value * multiplier; 
}; 

subtractPercent(250, 10); // 225 
subtractPercent(250, 3); // 242.5 

ähnlich wie bei Ihnen, übernimmt diese Funktion, dass value positiv ist, der Einfachheit halber. Negative Werte werden addiert anstatt subtrahiert.

subtractPercent(250, -10); // 275 
subtractPercent(-250, 10); // -225 
+0

Danke. 'Var prozent_discount = (dreizehn) * .01;' zu 'var prozent_discount = (dreizehn) * 0,01;' Problem gelöst. –

0

Spaß Tatsache - Float-Typ ist nicht präzise. es kam aus der Theorie der großen Zahlen, und nach dem Muster ist es Annäherung. das ist der Grund, warum mehrere Sprachen auch Typen wie Geld etc. anbieten und für Sprachen, die das nicht tun, berechnen wir alle monetären Dinge auf ganzen Zahlen. es ist nicht Javascript bezogen "Bug", es ist Informatik "Feature" :)

wie man monetäre Zeug auf ganze Zahlen zu berechnen? Nun, Sie müssen einen neuen Typ erstellen/emulieren. allgemeine Idee ist

  • konvertiert alle Daten aus Float auch alle Berechnungen auf ganze Zahlen (kein Schwimmer gemischt werden kann, oder das Ergebnis wird auch zu schweben umgewandelt werden) durchführen, indem 100
  • auf ganzzahlige Multiplikation
  • bei das Ende (in den meisten Fällen auf die Datenausgabe/Benutzeroberfläche ist) von 100

ja, in 21 Jahrhundert jeden Wert teilen Sie es einfach dumm aussieht, aber es gibt keine Magie, die Sie verwenden können, wenn Ihr Werkzeug (JS) hat keinen dedizierten Datentyp für monetäre Berechnungen. Du musst es bauen.

ist JS die einzige Sprache in diesem Projekt? Wenn es zum Beispiel einige SQL db gibt, haben die meisten von ihnen dedizierte Währungstypen, so dass Sie alle Ihre Berechnungen auf Datenbankseite vornehmen können.

Verwandte Themen