Gründe und Lösungen für den Verlust der numerischen Genauigkeit von JS

Gliederung

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

1. Grund

Denn in Computern werden Zahlen zuerst in Binärzahlen, dann in Arithmetik und schließlich in Dezimalzahlen umgewandelt

Zum Beispiel: 0,1 + 0,2

0.1 也就是0.0001100110011001100110011001100110011001100110011001101
0.2 也就是0.001100110011001100110011001100110011001100110011001101

即:
0.00011001100110011001100110011001100110011001100110011010 +
0.0011001100110011001100110011001100110011001100110011010 =
0.0100110011001100110011001100110011001100110011001100111

Das Ergebnis 0,0100110011001100110011001100110011001100110011001100111 und in eine Dezimalzahl umgewandelt ist 0,300000000000000004.

2. Lösungen

(1) Plugin-Dezimalzahl

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

(2) Plugin bignumber

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

(3) eine ganze Zahl werden

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;
}

Ich denke du magst

Origin blog.csdn.net/weixin_35773751/article/details/126012076
Empfohlen
Rangfolge