JavaScript Internals (521 Qs)•Part 8: Modern JavaScript APIs, WeakRef, Proxy & Performance (464 - 521)
How does JavaScript handle floating point precision issues?
JavaScript uses IEEE 754 double-precision (64-bit) floating-point format, which can cause precision issues with decimal numbers.
javascript
console.log(0.1 + 0.2); // 0.30000000000000004
console.log(0.1 + 0.2 === 0.3); // false
Solutions:
- Using epsilon comparison:
javascript
function areEqual(a, b) {
return Math.abs(a - b) < Number.EPSILON;
}
console.log(areEqual(0.1 + 0.2, 0.3)); // true
- Rounding to fixed decimals:
javascript
const result = Math.round((0.1 + 0.2) * 100) / 100; // 0.3
- Using toFixed() or toPrecision():
javascript
const sum = (0.1 + 0.2).toFixed(2); // "0.30"
const num = parseFloat(sum); // 0.3
- Working with integers (cents instead of dollars):
javascript
const price1 = 10; // $0.10 as 10 cents
const price2 = 20; // $0.20 as 20 cents
const total = price1 + price2; // 30 cents
const dollars = total / 100; // $0.30
- Using libraries for precise calculations:
javascript
// decimal.js, big.js, or bignumber.js
const Decimal = require('decimal.js');
const result = new Decimal(0.1).plus(0.2); // 0.3