I wonder why in JavaScript0.1 + 0.2  // return 0.300000000000000044%0.1 // return 0.09999999999999978http://jsbin.com/oHISAfU/1/edit  (Example)In C the math.h library fmod functionprintf(%f, fmod(4.0,0.1));  // print 0.100000 http://ideone.com/RG5Wyv (Example)And in Spotlight (search feature in the Mac OS X ~ I already submit bug report) that support math operation4%0.1 = 0.1
What is the reason of inaccuracy of operations on float numbers?
floating point
It's because 0.1 = 1 / 10 = 1 / (2 × 5) cannot be represented exactly in binary floating point.  This happens in C too: printf(%.20f, fmod(4.0,0.1));prints 0.09999999999999978351.Specifically, the only numbers that binary floating point can represent exactly are dyadic fractions of the form a / 2b, where a and b are integers.  Even more specifically, for IEEE single precision floating point numbers, a must be between -224 and 224 and b must, in effect, be between -151 and 104.  (Or at least approximately so; there are some tricky special cases like denormalized numbers.)  For double precision floats, the ranges are wider, but even so, a fraction like 1 / 10 cannot be represented exactly, because the denominator is not a power of two.