Все потому же....
если взять и сделать так
a = int((10.2-8.1)*10000000);
trace (a)
то получим, а = 20999999
а это значит что после вычисления (10.2-8.1) мы получаем не (2.1), а банально, но факт (2.0999999). А это соответственно не равно (2.1)
Тут получается что все дробные вычисления надо делать через сдвиг разрядной сетки.
-