Erros de ponto flutuante ocorrem quando a operação de multiplicação da multiplicação decimal em JS.
<Cript>
Alerta (11*22.9)
</script>
O resultado foi 251.89999999999998 em vez de 251,9
Deve haver dores de cabeça de muitas pessoas. Então, como resolvê -lo? Aqui, a solução é fornecida.
1,
Copie o código do código da seguinte forma:
<Cript>
Alerta (11*(22,9*10)/10);
</script>
A idéia aproximada de resolver o problema é que o fator é aumentado em um número inteiro primeiro e finalmente dividido pelo múltiplo correspondente, para que o resultado correto possa ser obtido.
2,
Copie o código do código da seguinte forma:
<script adie>
Número.prototype.raate = function () {
var OS.ToString ();
if (ostr.indexOF (".") ==-1)
Retornar 1;
outro
Return Math.pow (10, parseint (Osr.Length-organ.IndexOF (".");
}
função trans () {
args = trans.arguments;
var teste = 1;
para (i = 0; i <args.length; i ++)
temp*= args [i]*args [i] .Raate ();
para (i = 0; i <args.length; i ++)
temp/= args [i] .Raate ();
Retornar Temp
}
Alerta (trans (11,22,9));
</script>
Esta solução é um método mais problemático, mas pode fazer você provavelmente entender o processo real de resolver esse problema.
Você também pode usar o método de quatro casas e cinco métodos de entrada. .
Copie o código do código da seguinte forma:
Função fordight (dight, como) {
Dight = Math.Round (Dight*Math.pow (10, como))/Math.pow (10, como);
Retornar dign;
}
// exceto o método para obter o método preciso de remover o método
// Descrição: Os resultados do JavaScript terão um erro e ficará óbvio quando os dois números de ponto flutuante forem removidos. Esta função retorna um resultado de remoção mais preciso.
// Ligue para: accdiv (arg1, arg2)
// Valor de retorno: arg1, exceto os resultados precisos do arg2
Função accdiv (arg1, arg2) {{
var t1 = 0, t2 = 0, r1, r2;
tente {t1 = arg1.toString ().
tente {t2 = arg2.toString ().
com (matemática) {
R1 = número (arg1.toString (). Substituir (".", "")))
r2 = número (arg2.toString (). substituir (".", "")))
Return (r1/r2)*pow (10, t2-t1);
}
}
// Adicione um método div ao tipo de número, que é mais conveniente para ligar.
Número.prototype.div = function (arg) {
Retornar accdiv (este, arg);
}
// Função de multiplicação para obter resultados de multiplicação precisos
// Descrição: Os resultados dos resultados da multiplicação de JavaScript terão um erro e ficará óbvio quando os dois números de ponto flutuante forem multiplicados. Esta função retorna um resultado de multiplicação mais preciso.
// Ligue para: accmul (arg1, arg2)
// Valor de retorno: Arg1 é multiplicado pelos resultados precisos do Arg2
Função accmul (arg1, arg2)
{{
varm m = 0, s1 = arg1.toString (), s2 = arg2.toString ();
Tente {m+= s1.split (".") [1] .Length} Catch (e) {}
Tente {m+= s2.split (".") [1] .length} catch (e) {}
Número de retorno (S1.Replace (".", "")*Número (S2.replace (".", "") /Math.pow (10, m)
}
// Adicione um método mul ao tipo de número, que é mais conveniente para ligar.
Número.prototype.mul = function (arg) {
Retornar accmul (arg, isso);
}
// Adicione o método para obter resultados adicionais precisos
// Descrição: Os resultados do JavaScript terão um erro e será mais óbvio quando os dois números de ponto flutuante forem adicionados. Esta função retorna um resultado mais preciso da adição.
// Ligue para: Accidd (Arg1, Arg2)
// Valor de retorno: arg1 mais os resultados precisos do arg2
Função acadd (arg1, arg2) {{
var r1, r2, m;
tente {r1 = arg1.toString ().
tente {r2 = arg2.toString ().
M = Math.pow (10, Math.Max (R1, R2)))
Retornar (arg1*m+arg2*m)/m
}
// Adicione um método ADD ao tipo de número, que é mais conveniente de ligar.
Número.prototype.add = function (arg) {
Retornar Acadd (Arg, isso);
}