Floating point numbers can't represent most decimal numbers exactly, so when you type a floating point literal you actually get an approximation of that literal. The approximation may be larger or smaller than the number you typed.
You can see the exact value of a floating point number by casting it to Decimal or Fraction.
>>> from decimal import Decimal
>>> Decimal(0.01)
Decimal('0.01000000000000000020816681711721685132943093776702880859375')
>>> from fractions import Fractio
>>> Fraction(0.01)
Fraction(5764607523034235, 576460752303423488)
We can use the Fraction type to find the error caused by our inexact literal.
>>> float((Fraction(1)/Fraction(0.01)) - 100)
-2.0816681711721685e-15
We can also find out how granular double precision floating point numbers around 100 are by using nextafter from numpy.
>>> from numpy import nextafter
>>> nextafter(100,0)-100
-1.4210854715202004e-14
From this we can surmise that the nearest floating point number to 1/0.01000000000000000020816681711721685132943093776702880859375
is in-fact exactly 100.
The difference between 1//0.01
and int(1/0.01)
is the rounding. 1//0.01 rounds the exact result down to the next whole number in a single step. So we get a result of 99.
int(1/0.01) on the other hand rounds in two stages, first it rounds the result to the nearest double precision floating point number (which is exactly 100), then it rounds that floating point number down to the next integer (which is again exactly 100).