Is 'floating-point arithmetic' 100% accurate in JavaScript?

In JavaScript, floating-point arithmetic is not 100% accurate due to how computers store decimal numbers in binary format. This leads to precision errors that can affect calculations involving decimal values.

Understanding Floating Point Numbers

A floating-point number is any number with a decimal point, such as 1.52, 0.14, or -98.345. In JavaScript, all numbers are stored using the IEEE 754 double precision format, which uses 64 bits to represent numbers.

Sign Exponent (11 bits) Mantissa/Fraction (52 bits) 64-bit IEEE 754 Format

The Precision Problem

The main issue occurs because decimal fractions cannot always be represented exactly in binary. For example, 0.1 in decimal becomes an infinitely repeating fraction in binary, leading to rounding errors.

Example: Basic Addition Error

<html>
<head>
   <title>Floating Point Precision</title>
</head>
<body>
   <h3 id="result"></h3>
   <script>
      let sum = 0.2 + 0.4;
      document.getElementById("result").innerHTML = "0.2 + 0.4 = " + sum;
   </script>
</body>
</html>
0.2 + 0.4 = 0.6000000000000001

Example: Mixed Decimal and Integer

<html>
<head>
   <title>Mixed Addition</title>
</head>
<body>
   <h3 id="result"></h3>
   <script>
      let a = 2.14;
      let b = 2;
      let sum = a + b;
      document.getElementById("result").innerHTML = "2.14 + 2 = " + sum;
   </script>
</body>
</html>
2.14 + 2 = 4.140000000000001

Example: Large Number Precision Loss

<html>
<head>
   <title>Large Number Precision</title>
</head>
<body>
   <h4 id="result"></h4>
   <p>Integers are accurate up to 15 digits.</p>
   <script>
      let a = 2.14;
      let b = 9999999999999999; // 16 digits - will lose precision
      let sum = a + b;
      document.getElementById("result").innerHTML = "2.14 + 9999999999999999 = " + sum;
   </script>
</body>
</html>
2.14 + 9999999999999999 = 10000000000000000

Solution: Correction Factors

To work around precision issues, you can use correction factors by multiplying by powers of 10 to work with integers, then dividing back.

<html>
<head>
   <title>Correction Factor Solution</title>
</head>
<body>
   <script>
      function demonstratePrecision() {
         let a = 0.1;
         let b = 0.2;
         let directMultiply = a * b;
         document.write("Rounding error: " + directMultiply + "<br>");
         
         // Using correction factor of 10
         let correctionFactor = 10;
         let correctedResult = (a * correctionFactor) * (b * correctionFactor) / (correctionFactor * correctionFactor);
         document.write("After using correction factor: " + correctedResult);
      }
      demonstratePrecision();
   </script>
</body>
</html>
Rounding error: 0.020000000000000004
After using correction factor: 0.02

Alternative Solutions

Method Use Case Example
toFixed() Display formatting (0.1 + 0.2).toFixed(2)
Correction Factors Precise calculations Multiply by 10, calculate, divide by 10
Libraries Financial calculations decimal.js, big.js

Conclusion

Floating-point arithmetic in JavaScript is not 100% accurate due to binary representation limitations. Use correction factors or specialized libraries for precise decimal calculations, especially in financial applications.

Updated on: 2026-03-15T23:18:59+05:30

617 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements