1. Use JS para calcular
12.32 * 7 Qual é o resultado?
Resposta: 86.240000000000001
Por que esse problema ocorre? Como resolvê -lo?
Há um bug quando o JS lida com multiplicação e divisão de decimais. A solução pode ser: transforme o decimal em um número inteiro para lidar com isso.
O cálculo acima pode ser alterado para:
12,32 * 100 * 7/10
O resultado é: 86.24, correto.
Vamos calcular novamente:
8,80 * 100 * 12 /100
Resultado: 105.600000000000002
Problemas semelhantes ocorrerão em 38,80.
Aumente a precisão em 10 vezes:
8,80 * 1000 * 12 /1000
Resultados: 105.6
É normal.
16,40 * 1000000 * 6 /1000000
Existem problemas com o resultado
Para tornar a execução do JS mais precisa, o valor pode ser expandido diretamente 10.000 vezes no cálculo decimal JS subsequente e depois dividido por 10.000 para resolver o problema.
var num = 38,80;
var num2 = 13;
alerta (num * 10000 * 12 /10000);
O número multiplicado e dividido por 10.000 é o mais adequado para testes. Alguns números têm problemas quando são menores e alguns números têm problemas quando são maiores (1000.000).
dois,
<SCRIPT> número.prototype.rate = function () {varostr = this.toString (); if (ostr.indexOf (".") ==-1) return1; elsereturnmath.pow (10, parseint (ostr.length-ostr.IndexOf (".")-1); functiontran () {args = Tran.arguments; vararmp = 1; para (i = 0; i <args.length; i ++) temp*= args [i]*args [i] .rate (); para (i = 0; </script>Esta solução é uma solução mais pesada, mas pode fornecer uma compreensão aproximada do processo real de resolver esse problema.
// A função de divisão é usada para obter resultados precisos da divisão // Nota: Haverá erros no resultado da divisão do JavaScript, que serão mais óbvios ao dividir dois números de ponto flutuante. Esta função retorna um resultado de divisão mais preciso. // CALL: accdiv (arg1, arg2) // Valor de retorno: o resultado exato de arg1 dividido pela função arg2 accdiv (arg1, arg2) {var t1 = 0, t2 = 0, r1, r2; tente {t1 = arg1.toString (). split (".") [1] .Length} catch (e) {} tente {t2 = arg2.toString (). split (".") [1] .Leng th} catch (e) {} com (math) {r1 = número (arg1.toString (). substituir (".", ")) r2 = número (arg2.toString (). reply (". "," ")) retornar (R1/R2)*Pow (10, T2-T1);}} // Adicione um método Div ao tipo de número, tornando mais conveniente ligar. Número.prototype.div = function (arg) {return accdiv (this, arg);} // A função múltipla é usada para obter resultados de multiplicação precisos // Nota: haverá erros nos resultados de multiplicação do JavaScript, que serão mais óbvios ao multiplicar dois números de ponto flutuante. Esta função retorna um resultado de multiplicação mais preciso. // CHAMADA: ACCMUL (ARG1, ARG2) // Valor de retorno: o resultado exato de Arg1 multiplicado pela função arg2 accmul (arg1, arg2) {var m = 0, s1 = arg1.toString (), s2 = arg2.toString (); try {m+= s1.split (".") [1] .Length} catch (e) {} tente {m+= s2.split (" Número (S1.Rplace (".", "))*Número (S2.replace (". ","))/Math.pow (10, M)} // Adicione um método MUL ao tipo de número, que é mais conveniente para chamar. Número.prototype.mul = function (arg) {return accmul (arg, this);} // A função de adição é usada para obter resultados de adição precisos // Nota: Haverá erros no resultado de adição de JavaScript, que será mais óbvio ao adicionar dois números de ponto flutuante. Esta função retorna um resultado de adição mais preciso. // Ligue para: Accadd (arg1, arg2) // Valor de retorno: o resultado exato da função arg1 mais arg2 accadd (arg1, arg2) {var r1, r2, m; tente {r1 = arg1.toString (). split (".") [1] .Length} Catch (e) {r1 = 0} Try {r2 = arg2.toString (). Split ("." (arg1*m+arg2*m)/m} // Adicione um método Adicionar ao tipo de número, tornando mais conveniente ligar. Número.prototype.add = function (arg) {return accadd (arg, this);}O manuseio de erros de Multiplicação Decimal JavaScript acima é todo o conteúdo que compartilhei com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.