Thursday, 27 July 2017

JavaScript adding decimal numbers issue




So I am making a script that adds two numbers (decimal numbers) together, which I have encountered a problem.



http://jsfiddle.net/DerekL/esqnC/



I made the script, it turns out pretty good:



0.1 + 0.5  //0.6

0.2 + 0.3 //0.5


But soon I see:



0.1 + 0.2  //0.30000000000000004
0.01 + 0.06 //0.06999999999999999


And it does not look right to me. I know it is a shortcoming of using float point with finite bits, but I can't find a way to fix that.




Math.ceil   //No
Math.floor //No
.slice //No


UPDATE



Is it possible to multiply the numbers by 1000 first, then add them then divide it by 1000?


Answer




Use toFixed to convert it to a string with some decimal places shaved off, and then convert it back to a number.



+(0.1 + 0.2).toFixed(12) // 0.3


It looks like IE's toFixed has some weird behavior, so if you need to support IE something like this might be better:



Math.round((0.1 + 0.2) * 1e12) / 1e12

No comments:

Post a Comment

casting - Why wasn't Tobey Maguire in The Amazing Spider-Man? - Movies & TV

In the Spider-Man franchise, Tobey Maguire is an outstanding performer as a Spider-Man and also reprised his role in the sequels Spider-Man...