Razones y soluciones para la pérdida de precisión numérica JS

contorno

1.了解原因
2.解决方案

1. Motivo

Porque en las computadoras, los números se convierten primero a binario, luego a aritmética y finalmente a decimal.

Por ejemplo: 0.1 + 0.2

0.1 也就是0.0001100110011001100110011001100110011001100110011001101
0.2 也就是0.001100110011001100110011001100110011001100110011001101

即:
0.00011001100110011001100110011001100110011001100110011010 +
0.0011001100110011001100110011001100110011001100110011010 =
0.0100110011001100110011001100110011001100110011001100111

El resultado 0.0100110011001100110011001100110011001100110011001100111 y convertido a decimal es 0.300000000000000004.

2. Soluciones

(1) Complemento decimal

0.1 + 0.2                                // 0.30000000000000004
x = new Decimal(0.1)
y = x.plus(0.2)                          // '0.3'

(2) Número grande del complemento

x = new BigNumber(0.1)
y = x.plus(0.2)

(3) convertirse en un número entero

function add(num1, num2) {
    
    
  const num1Len = (num1.toString().split('.')[1] ).length;
  const num2Len = (num2.toString().split('.')[1] ).length;
  const maxLen = Math.pow(10, Math.max(num1Len, num2Len));
  return (num1 * maxLen + num2 * maxLen) / maxLen;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_35773751/article/details/126012076
Recomendado
Clasificación