No JavaScript, quando você usa decimais para executar operações de adição, subtração, multiplicação e divisão, você descobrirá que o resultado obtido às vezes é seguido por um longo decimal, o que torna a operação complicada e afeta os resultados do cálculo. Eu procurei na Internet os motivos, que são aproximadamente os seguintes: em JavaScript, muitos lugares decimais sempre aparecerão quando operações de dados com decimais. Isso ocorre porque no JavaScript, os números de ponto flutuante são calculados em 2 dígitos.
A cópia do código é a seguinte:
/**
* Operação de adição para evitar números de vários dígitos e perdas de precisão de cálculo após adicionar pontos decimais aos dados.
*
* @param num1 Adicionar número 1 | num2 Adicionar número 2
*/
função numadd (num1, num2) {
var basenum, basenum1, basenum2;
tentar {
Basenum1 = num1.toString (). Split (".") [1] .Length;
} catch (e) {
Basenum1 = 0;
}
tentar {
Basenum2 = num2.toString (). Split (".") [1] .Length;
} catch (e) {
Basenum2 = 0;
}
Basenum = Math.pow (10, Math.Max (Basenum1, Basenum2));
return (num1 * basenum + num2 * basenum) / basenum;
};
/**
* Operação de adição para evitar números de vários dígitos e perdas de precisão do cálculo após diminuir a fase de dados.
*
* @param num1 está subtraído | num2 está subtraído
*/
função numsub (num1, num2) {
var basenum, basenum1, basenum2;
var precisão; // precisão
tentar {
Basenum1 = num1.toString (). Split (".") [1] .Length;
} catch (e) {
Basenum1 = 0;
}
tentar {
Basenum2 = num2.toString (). Split (".") [1] .Length;
} catch (e) {
Basenum2 = 0;
}
Basenum = Math.pow (10, Math.Max (Basenum1, Basenum2));
Precision = (Basenum1> = Basenum2)? Basenum1: Basenum2;
retornar ((num1 * basenum - num2 * basenum) / basenum) .tofixado (precisão);
};
/**
* Operação de multiplicação para evitar números de vários dígitos e perdas de precisão de cálculo após multiplicar dados por pontos decimais.
*
* Multiplicador @param num1 | Multiplicador Num2
*/
função numMulti (num1, num2) {
var basenum = 0;
tentar {
Basenum += num1.toString (). Split (".") [1] .Length;
} catch (e) {
}
tentar {
Basenum += num2.toString (). Split (".") [1] .Length;
} catch (e) {
}
Número de retorno (num1.toString (). Substitua (".", "" ") * Número (num2.toString (). Substituir (". "," "") / Math.pow (10, Basenum);
};
/**
* Operação de divisão para evitar números de vários dígitos e perdas de precisão do cálculo após dividir o ponto decimal dos dados.
*
* @param num1 dividend | num2 dividendo
*/
função numdiv (num1, num2) {
var basenum1 = 0, basenum2 = 0;
var basenum3, basenum4;
tentar {
Basenum1 = num1.toString (). Split (".") [1] .Length;
} catch (e) {
Basenum1 = 0;
}
tentar {
Basenum2 = num2.toString (). Split (".") [1] .Length;
} catch (e) {
Basenum2 = 0;
}
com (matemática) {
Basenum3 = número (num1.toString (). substituir (".", ""));
Basenum4 = número (num2.toString (). substituir (".", ""));
retorno (basenum3 / basenum4) * Pow (10, basenum2 - basenum1);
}
};