[JavaScript] Negative Rundungen stimmen nicht mit Excel überein

Einführung

Hintergrund und Überblick

--Bedarf

Sie können im Math-Objekt von JavaScript keine n Bruchstellen angeben. Ich habe beschlossen, eine Funktion zu erstellen, da ich die JavaScript-Bibliothek nicht verwenden konnte.

Zu diesem Zeitpunkt ** verursachte die Berechnung negativer Zahlen einen Unterschied zwischen den Ergebnissen von JavaScript und Excel. ** ** ** Wir werden unsere Erkenntnisse zur Lösung dieses Problems teilen.

Vorausgesetzte Version

Problem

Zuerst habe ich diese Codierung ausprobiert. Eine Funktion, die Zahlen und gerundete Ziffern verwendet und das gerundete Ergebnis zurückgibt.

JavaScript


function myRound(number, pricision) {
    var _pow = Math.pow(10, pricision);
    return Math.round(number * _pow) / _pow;
};

Bei positiven Zahlen funktionierte es wie erwartet, bei negativen Zahlen war das Ergebnis jedoch wie folgt.

Originalwert JavaScript Excel
-5.4 -5 -5
-5.5 -5 -6
-5.9 -6 -6

Es unterscheidet sich von der Berechnung in Excel und kann die Anforderungen nicht erfüllen.

Lösung und Ergebnisse

Die Spezifikation zum Runden negativer Zahlen unterschied sich zwischen JavaScript (Math) und Excel. MDN - Math.round()

Mit anderen Worten, die "Richtung", die 0,5 rundet, ist die Differenz zwischen der Minusrichtung und der Nullrichtung.

--Ausrundungen in Minusrichtung, also -5,5 → -6

Deshalb.

Als ich den Code wie folgt änderte, war das Berechnungsergebnis das gleiche wie in Excel.

JavaScript


function myRound(number, pricision) {
    var _sign = (number < 0) ? -1 : 1;
    var _pow = Math.pow(10, pricision);
    return Math.round((number * _sign) * _pow) / _pow * _sign;
};     

Das gleiche Prinzip gilt für das Abrunden und Aufrunden negativer Zahlen, und die Ergebnisse unterscheiden sich zwischen JavaScript- und Excel-Funktionen. MDN - Math.floor() MDN - Math.ceil()

Auch in Java ist die Richtung der Verarbeitung negativer Brüche in der Math-Klasse und der BigDecimal-Klasse entgegengesetzt. Seien Sie vorsichtig beim Abschneiden und Runden negativer Zahlen in Java!

Also, ** Achten Sie bei der Verarbeitung negativer Brüche auf die "Richtung"! ** ** **

Artikel, die ich als Referenz verwendet habe

JavaScript Math.round überladen und auf die nächsten X-Stellen runden

Recommended Posts

[JavaScript] Negative Rundungen stimmen nicht mit Excel überein
JavaScript (Vanille) reagiert in Rails nicht.
Terminal startet nicht