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.
/**
* 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);