Maison  >  Article  >  interface Web  >  Solution au problème de perte de précision dans les compétences js d'addition, de soustraction, de multiplication et de division_javascript

Solution au problème de perte de précision dans les compétences js d'addition, de soustraction, de multiplication et de division_javascript

WBOY
WBOYoriginal
2016-05-16 16:48:101396parcourir

En JavaScript, lorsque vous utilisez des décimales pour l'addition, la soustraction, la multiplication et la division, vous constaterez que les résultats sont parfois suivis d'une longue période de décimales, ce qui complique l'opération et affecte les résultats des calculs. J'ai recherché les raisons en ligne et j'ai trouvé ce qui suit : En JavaScript, il y a toujours de nombreuses décimales lors du calcul de données avec des décimales. En effet, le calcul des nombres à virgule flottante en JavaScript est basé sur des calculs binaires.

Copier le code Le code est le suivant :

/**
* Opération d'addition pour éviter plusieurs chiffres et la perte de précision du calcul après l'ajout du point décimal aux données.
*
* @param num1 addend 1 | num2 addend 2
*/
function numAdd(num1, num2) {
var baseNum, baseNum1, baseNum2;
try {
baseNum1 = num1.toString().split(".")[1].length; >} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length; catch (e ) {
baseNum2 = 0;
}
baseNum = Math.pow(10, Math.max(baseNum1, baseNum2)); baseNum;
};
/**
* Opération d'addition pour éviter plusieurs chiffres et la perte de précision du calcul après l'ajout d'un point décimal de données.
*
* @param num1 minuend | num2 minuend
*/
function numSub(num1, num2) {
var baseNum, baseNum1, baseNum2; >essayez {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0
}
essayez {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
baseNum = Math .pow( 10, Math.max(baseNum1, baseNum2));
precision = (baseNum1 >= baseNum2) ? baseNum1 :
return ((num1 * baseNum - num2 * baseNum) / baseNum). toFixed(precision );
};
/**
* Opération de multiplication pour éviter plusieurs chiffres et la perte de précision du calcul après avoir multiplié les données avec un point décimal.
*
* @param num1 multiplicande | num2 multiplicateur
*/
function numMulti(num1, num2) {
var baseNum = 0;
try {
baseNum = num1.toString ().split(".")[1].length;
} catch (e) {
}
try {
baseNum = num2.toString().split(" .") [1].length;
} catch (e) {
}
return Number(num1.toString().replace(".", "")) * Number(num2.toString (). replace(".", "")) / Math.pow(10, baseNum);
/**
* Opération de division pour éviter plusieurs chiffres et la perte de précision des calculs après la division des données par point décimal.
*
* @param num1 dividende | num2 diviseur
*/
function numDiv(num1, num2) {
var baseNum1 = 0, baseNum2 = 0;
var baseNum3, baseNum4;
try {
baseNum1 = num1.toString().split(".")[1].length; >} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length; catch (e ) {
baseNum2 = 0;
}
with (Math) {
baseNum3 = Number(num1.toString().replace(".", "")); >baseNum4 = Number(num2.toString().replace(".", ""));
return (baseNum3 / baseNum4) * pow(10, baseNum2 - baseNum1);

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn