Como é o tipo de ponto flutuante em JS?
Por exemplo: var a = 0,69;
Eu quero obter 6,9 diretamente para escrever var c = a*10;
alerta (c); o resultado é: 6.8999999999999995
Quando você pesquisa on -line, alguns internautas disseram que este é um bug de cálculo de pontos flutuantes JS e encontrou uma solução:
Método 1: função personalizada JS
Copie o código do código da seguinte forma:
<Cript>
// 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);
}
// 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 accsub (arg1, arg2) {{
var r1, r2, m, n;
tente {r1 = arg1.toString ().
tente {r2 = arg2.toString ().
M = Math.pow (10, Math.Max (R1, R2));
// Última modificação por Deeka
// Comprimento de precisão de controle dinâmico
n = (r1> = r2)?
Return ((arg1*m-rg2*m)/m) .tofixado (n);
}
// 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);
}
var a = 0,69;
var b = 10;
alerta (a*b); // 6.899999999999995
alerta ((a*100)/10);
</script>
Basta chamar a função diretamente.
Método 2: Se você souber o número de dígitos decimais, pode considerar o número de números de ponto flutuante para o número inteiro (finalmente dividir o múltiplo correspondente) e, em seguida, execute a operação.
Alerta (11*22.9);
Alerta (11*(22,9*10)/10);