JavaScript math, rund zwei Dezimalstellen


Answers

Wenn Sie ein unäres Plus verwenden, um eine Zeichenfolge in eine Zahl zu konvertieren, wie in MDN dokumentiert .

Zum Beispiel: +discount.toFixed(2)

Question

Diese Frage hat hier bereits eine Antwort:

Ich habe die folgende JavaScript-Syntax:

var discount = Math.round(100 - (price / listprice) * 100);

Damit wird auf die ganze Zahl aufgerundet, wie kann ich das Ergebnis mit zwei Nachkommastellen zurückgeben?




Um das Ergebnis mit zwei Dezimalstellen zu erhalten, können Sie Folgendes tun:

var discount = Math.round((100 - (price / listprice) * 100) * 100) / 100;

Der Wert, der gerundet werden soll, wird mit 100 multipliziert, um die ersten beiden Ziffern zu erhalten. Dann teilen wir ihn durch 100, um das tatsächliche Ergebnis zu erhalten.




Ich denke, der beste Weg, den ich gesehen habe, ist die Multiplikation mit 10 zur Potenz der Anzahl der Ziffern, dann ein Math.round, dann schließlich die Division durch 10 in die Potenz der Ziffern. Hier ist eine einfache Funktion, die ich in Typoskript verwende:

function roundToXDigits(value: number, digits: number) {
    value = value * Math.pow(10, digits);
    value = Math.round(value);
    value = value / Math.pow(10, digits);
    return value;
}

Oder einfaches Javascript:

function roundToXDigits(value, digits) {
    if(!digits){
        digits = 2;
    }
    value = value * Math.pow(10, digits);
    value = Math.round(value);
    value = value / Math.pow(10, digits);
    return value;
}



function discoverOriginalPrice(discountedPrice, salePercentage) {
  var originalPrice = discountedPrice / (1 - (salePercentage * .01));
  return +originalPrice.toFixed(2);
}




Eine kleine Variation der angenommenen Antwort. toFixed(2) gibt eine Zeichenfolge zurück, und Sie erhalten immer zwei Dezimalstellen. Dies können Nullen sein. Wenn Sie die letzten Null (s) unterdrücken möchten, tun Sie dies einfach:

var discount = + ((price / listprice).toFixed(2));

Bearbeitet: Ich habe gerade entdeckt, was ein Bug in Firefox 35.0.1 zu sein scheint, was bedeutet, dass das obige NaN einige Werte geben kann.
Ich habe meinen Code in geändert

var discount = Math.round(price / listprice * 100) / 100;

Dies ergibt eine Zahl mit bis zu zwei Dezimalstellen. Wenn Sie drei wollten, würden Sie multiplizieren und durch 1000 dividieren, und so weiter.
Das OP möchte immer zwei Dezimalstellen haben, aber wenn toFixed () in Firefox gebrochen ist, muss es zuerst repariert werden.
Siehe https://bugzilla.mozilla.org/show_bug.cgi?id=1134388




    function round(num,dec)
    {
      num = Math.round(num+'e'+dec)
      return Number(num+'e-'+dec)
    }
      //Round to a decimal of your choosing:
    round(1.3453,2)