Solution to JavaScript's 0.1 + 0.2 = 0.30000000000000004 problem?
January 8, 2015 #javascript
Open your JavaScript console and try this:
> 0.1 + 0.2 == 0.3
false
> 0.1 + 0.2
0.30000000000000004
You may ask yourself Is floating point math broken?. The answer is that JavaScript uses floating point math based on the IEEE 754 standard, the same as Java’s double
. If you want the details on what that means, either quickly read The Floating-Point Guide - What Every Programmer Should Know About Floating-Point Arithmetic or fully digest What Every Computer Scientist Should Know About Floating-Point Arithmetic.
But if I really want 0.1 + 0.2 == 0.3
then what do I do? The Java BigDecimal class solved this problem, and there similar solutions for JavaScript: GWT compiled to JavaScript version; a JavaScript translation of the ICU4J’s com.ibm.icu.math.BigDecimal
.
There are also other JavaScript libraries like big.js. Here is big.js in action from the JavaScript console:
> Big(0.1).plus(0.2).eq(0.3)
true
> Big(0.1).plus(0.2).toString()
"0.3"
How have other teams solved this problem? Is there a de facto JavaScript library to use that has been well tested? Would a common library be useful?