Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript float subtract

I was wondering how can I subtract two negative Floating-Point numbers in javascript. I tried:

alert(-0.2-0.1);

and the result is -0.30000000000000004. Am I doing something wrong? What do I have to do to get -0.3 ?

like image 313
Teneff Avatar asked May 17 '11 08:05

Teneff


Video Answer


3 Answers

No, nothing wrong with your code, most decimal fractions cannot be represented exactly in binary, use

number.toFixed(x)

Where x is the number of decimals you want and number is the result of the subtraction.

like image 105
Alberto Zaccagni Avatar answered Oct 13 '22 20:10

Alberto Zaccagni


Another possible solution might be this:

Number((-0.2-0.1).toFixed(x))

Where x should be the tolerance in decimals you'd like.

Running this with an x of 16, gives me an output of -0.3.

-0.3 === Number((-0.2-0.1).toFixed(16)) // true, and also with every 0 < x < 16

Let me know.

like image 37
Cristian Douce Avatar answered Oct 13 '22 20:10

Cristian Douce


You are doing nothing wrong, what you are seeing is the side effect of computers storing numbers in base 2. In base 10, 1/3 can't be precisely represented: .33333333 (with a bar over the 3). The same is true for 1/10 and 1/5 in base 2 or binary. The answer you see is merely the result of a rounding error. If you are working with money, it is often advised to just store values as cents to avoid some floating point errors.

As far as fixing the result you can do something like:

var SIGDIG= 100000000;
alert( Math.floor((-0.2-0.1)*SIGDIG)/SIGDIG );
like image 2
daalbert Avatar answered Oct 13 '22 21:10

daalbert