Las razones de este resultado son como usted dice, y se explican en ¿Se han roto las matemáticas de coma flotante? y muchas otras preguntas y respuestas similares.
Cuando conoce el número de decimales de numerador y denominador, una forma más confiable es multiplicar esos números primero para que puedan tratarse como enteros y luego realizar una división de enteros en ellos:
Entonces, en su caso, 1//0.01debe convertirse primero a 1*100//(0.01*100)cuál es 100.
En casos más extremos, aún puede obtener resultados "inesperados". Puede ser necesario agregar una roundllamada al numerador y al denominador antes de realizar la división entera:
1 * 100000000000 // round(0.00000000001 * 100000000000)
Pero, si se trata de trabajar con decimales fijos (dinero, centavos), entonces considere trabajar con centavos como unidad , de modo que toda la aritmética se pueda hacer como aritmética de enteros, y solo se convierta a / desde la unidad monetaria principal (dólar) al hacer E / S
O, alternativamente, use una biblioteca para decimales, como decimal , que:
... proporciona soporte para la aritmética rápida de coma flotante decimal correctamente redondeada.
from decimal import Decimal
cent = Decimal(1) / Decimal(100) # Contrary to floating point, this is exactly 0.01
print (Decimal(1) // cent) # 100