[JavaScript] L'arrondi négatif ne correspond pas à Excel

introduction

Contexte et aperçu

--Exigences

Vous ne pouvez pas spécifier n chiffres fractionnaires dans l'objet Math de JavaScript. J'ai décidé de créer une fonction car je ne pouvais pas utiliser la bibliothèque JavaScript.

À ce moment, ** le calcul des nombres négatifs a causé une différence entre les résultats de JavaScript et Excel. ** ** Nous partagerons nos conclusions sur la façon de résoudre ce problème.

Version prérequise

problème

Tout d'abord, j'ai essayé ce codage. Une fonction qui prend des nombres et des chiffres arrondis et renvoie le résultat arrondi.

JavaScript


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

Pour les nombres positifs, cela a fonctionné comme prévu, mais pour les nombres négatifs, le résultat était le suivant.

Valeur d'origine JavaScript Excel
-5.4 -5 -5
-5.5 -5 -6
-5.9 -6 -6

Il est différent du calcul dans Excel et ne peut pas répondre aux exigences.

Solution et résultats

La spécification pour arrondir les nombres négatifs était différente entre JavaScript (Math) et Excel. MDN - Math.round()

En d'autres termes, la «direction» qui arrondit 0,5 est la différence entre la direction moins et la direction zéro.

--Excel arrondit dans le sens moins, donc -5,5 → -6 --Depuis que JavaScript arrondit dans la direction zéro, -5,5 → -5

Voilà pourquoi.

Lorsque j'ai modifié le code comme suit, le résultat du calcul était le même qu'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;
};     

Le même principe s'applique pour arrondir et arrondir les nombres négatifs, et les résultats diffèrent entre les fonctions JavaScript et Excel. MDN - Math.floor() MDN - Math.ceil()

Toujours en Java, la direction du traitement des fractions négatives est opposée dans la classe Math et la classe BigDecimal. Faites attention à ne pas tronquer et arrondir les nombres négatifs en Java!

Donc, ** Faites attention à la «direction» lors du traitement des fractions négatives! ** **

Articles que j'ai utilisés comme référence

Surcharger JavaScript Math.round et arrondir au chiffre X le plus proche

Recommended Posts

[JavaScript] L'arrondi négatif ne correspond pas à Excel
JavaScript (vanilla) ne répond pas dans Rails.
Le terminal ne démarre pas