Los errores de punto flotante ocurren cuando la operación de multiplicación de la multiplicación decimal en JS.
<script>
Alerta (11*22.9)
</script>
El resultado fue 251.89999999999998 en lugar de 251.9
Debe haber dolores de cabeza de muchas personas. Entonces, ¿cómo resolverlo? Aquí, se da la solución.
1,
Copiar código del código de la siguiente manera:
<script>
Alerta (11*(22.9*10)/10);
</script>
La idea aproximada de resolver el problema es que el factor se amplía primero en un entero y finalmente se divide por el múltiplo correspondiente, de modo que se pueda obtener el resultado correcto.
2,
Copiar código del código de la siguiente manera:
<script diferir>
Número.prototype.raate = function () {
var os.ToString ();
if (ostr.indexof (".") ==-1)
Regresar 1;
demás
Return math.pow (10, parseint (osr.length-organ.indexof (".");
}
función trans () {
args = trans.argumentos;
prueba var = 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 ();
Temperadora de retorno
}
Alerta (trans (11,22.9));
</script>
Esta solución es un método más problemático, pero probablemente puede hacer que comprenda el proceso real de resolver este problema.
También puede usar el método de cuatro casas y cinco métodos entrantes. .
Copiar código del código de la siguiente manera:
Function Fordight (Dight, How) {
Dight = Math.round (Dight*Math.Pow (10, How))/Math.Pow (10, How);
Devolver dign;
}
// excepto el método para obtener el método preciso para eliminar el método
// Descripción: Los resultados de JavaScript tendrán un error, y será obvio cuando se eliminen los dos números de punto flotante. Esta función devuelve un resultado de eliminación más preciso.
// Llamar: Accdiv (Arg1, Arg2)
// Valor de retorno: Arg1 excepto los resultados precisos de Arg2
Función accDiv (arg1, arg2) {{
var t1 = 0, t2 = 0, r1, r2;
Prueba {t1 = arg1.ToString ().
intente {t2 = arg2.toString ().
con (matemáticas) {
R1 = número (arg1.ToString (). Reemplazar (".", ""))
r2 = número (arg2.ToString (). reemplazar (".", ""))
Return (r1/r2)*pow (10, t2-t1);
}
}
// Agregue un método Div al tipo de número, que es más conveniente de llamar.
Número.prototype.div = function (arg) {
Devolver accdiv (this, arg);
}
// función de multiplicación para obtener resultados de multiplicación precisos
// Descripción: Los resultados de los resultados de multiplicación de JavaScript tendrán un error, y será obvio cuando se multiplicen los dos números de punto flotante. Esta función devuelve un resultado de multiplicación más preciso.
// Llamar: Accmul (Arg1, Arg2)
// Valor de retorno: Arg1 se multiplica por los resultados precisos de Arg2
Función Accmul (Arg1, Arg2)
{{
Varm m = 0, s1 = arg1.ToString (), s2 = arg2.ToString ();
Intente {m+= s1.split (".") [1] .length} catch (e) {}
Prueba {m+= s2.split (".") [1] .length} catch (e) {}
Número de retorno (S1.replace (".", "")*Número (S2.replace (".", "") /Math.Pow (10, M)
}
// Agregar un método MUL al tipo de número, que es más conveniente de llamar.
Número.prototype.mul = function (arg) {
Devolver accmul (arg, esto);
}
// Agregar método para obtener resultados adicionales precisos
// Descripción: Los resultados de JavaScript tendrán un error, y será más obvio cuando se agregan los dos números de punto flotante. Esta función devuelve un resultado más preciso de la adición.
// Llamar: Accidd (Arg1, Arg2)
// Valor de retorno: Arg1 más los resultados precisos de Arg2
Función acadd (arg1, arg2) {{
var r1, r2, m;
intente {r1 = arg1.ToString ().
intente {r2 = arg2.toString ().
M = Math.Pow (10, Math.max (R1, R2)))
Return (arg1*m+arg2*m)/m
}
// Agregar un método Agregar al tipo de número, que es más conveniente para llamar.
Número.prototype.add = function (arg) {
Regresar acadd (arg, esto);
}