1. Use JS para calcular
12.32 * 7 ¿Cuál es el resultado?
Respuesta: 86.240000000000001
¿Por qué ocurre este problema? ¿Cómo resolverlo?
Hay un error cuando JS trata con multiplicación y división de decimales. La solución puede ser: convertir el decimal en un entero para manejarlo.
El cálculo anterior se puede cambiar a:
12.32 * 100 * 7/100
El resultado es: 86.24, correcto.
Calculemos de nuevo:
8.80 * 100 * 12/100
Resultado: 105.60000000000000002
Se producirán problemas similares a 38.80.
Aumentar la precisión en 10 veces:
8.80 * 1000 * 12/1000
Resultados: 105.6
Es normal.
16.40 * 1000000 * 6 /1000000
Hay problemas con el resultado
Para hacer que la ejecución de JS sea más precisa, el valor se puede ampliar directamente 10,000 veces en el cálculo decimal JS posterior, y luego dividido por 10,000 para resolver el problema.
var num = 38.80;
var num2 = 13;
alerta (num * 10000 * 12/10000);
El número multiplicado y dividido por 10,000 es el más adecuado para las pruebas. Algunos números tienen problemas cuando son más pequeños, y algunos números tienen problemas cuando son más grandes (1000,000).
dos,
<script> number.prototype.rate = function () {varostr = this.ToString (); if (ostr.indexof (".") ==-1) return1; elsereturnmath.pow (10, parseInt (ostr.length-ostretr.indexof (".")-1);} functan () {args = tran.arguments; varTemp = 1; for (i = 0; i <args.length; i ++) temp*= args [i]*args [i] .Rate (); for (i = 0; i <s.length; i ++) temp/= args [i] .rate (); returntEmp} alerta (tran (11,9); </script>Esta solución es una solución más engorrosa, pero puede darle una comprensión aproximada del proceso real de resolver este problema.
// La función de división se utiliza para obtener resultados de división precisos // Nota: Habrá errores en el resultado de la división de JavaScript, que será más obvio al dividir dos números de puntos flotantes. Esta función devuelve un resultado de división más preciso. // Llame: AccDiv (Arg1, Arg2) // Valor de retorno: El resultado exacto de Arg1 dividido por la función Arg2 AccDiv (Arg1, Arg2) {Var t1 = 0, t2 = 0, r1, r2; try {t1 = arg1.ToString (). Split (".") [1] .length} catch (e) {} try {t2 = arg2.ToString (). Split (") [1] .leng. th} catch (e) {} con (math) {r1 = number (arg1.ToString (). reemplazar (".", ")) r2 = number (arg2.ToString (). reemplazar (". ",") return (R1/R2)*POW (10, T2-T1);}} // Agregue un método DIV al tipo de número, lo que hace que sea más conveniente llamar. Número.prototype.div = function (arg) {return accDiv (this, arg);} // La función múltiple se usa para obtener resultados de multiplicación precisos // Nota: Habrá errores en los resultados de multiplicación de JavaScript, que será más obvio al multiplicar dos números de punto flotante. Esta función devuelve un resultado de multiplicación más preciso. // Llame: AccMul (Arg1, Arg2) // Valor de retorno: El resultado exacto de Arg1 multiplicado por la función Arg2 AccMul (Arg1, Arg2) {Var m = 0, s1 = arg1.ToString (), s2 = arg2.ToString (); try {m+= s1.split (".") [1] .length} capt (e) {} try {m+= s2.split (".") [1] .length} capt (e)} regreso Número (S1.replace (".", "))*Número (S2.replace (". ","))/Math.Pow (10, M)} // Agregue un método MUL al tipo de número, que es más conveniente para llamar. Number.prototype.mul = function (arg) {return accMul (arg, this);} // La función de adición se usa para obtener resultados de adición precisos/Nota: Habrá errores en el resultado adicional de JavaScript, que será más obvio al agregar dos números de punto flotante. Esta función devuelve un resultado de adición más preciso. // llamar: Accadd (arg1, arg2) // Valor de retorno: el resultado exacto de la función arg1 más arg2 Accadd (arg1, arg2) {var r1, r2, m; try {r1 = arg1.ToString (). Split (".") [1] .length} Catch (e) {r1 = 0} try {r2 = arg2.ToString (). Split (".") [1] .length} Catch (e) {r2 = 0} m = Math.Pow (10, Math.Max (R1, R2) (arg1*m+arg2*m)/m} // Agregar un método ADD al tipo de número, lo que hace que sea más conveniente llamar. Número.prototype.add = function (arg) {return accadd (arg, this);}El manejo de errores de resultados de multiplicación decimal de JavaScript anterior es todo el contenido que he compartido con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.