Для вашего строкового решения важно то, что алгоритм отображения с плавающей запятой изменился в python 2.7:
Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39)
>>> 12345.6789
12345.678900000001
Python 2.7.0+ (r27:82500, Sep 15 2010, 18:04:55)
>>> 12345.6789
12345.6789
Независимо от того, используете ли вы одно или другое, возникает проблема, связанная с точным определением точности числа с плавающей запятой. Скажем, вашему алгоритму присвоено значение с плавающей запятой 1.23. Какая точность? Может быть, это было сохранено как 1.230, но это просто случилось с нулевой цифрой. Поэтому вы должны знать, сколько цифр после периода вы хотите сохранить.
Кроме того, битовые операции не работают с плавающей точкой:
>>> 12345.6789 << 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for <<: 'float' and 'int'
Таким образом, вы должны умножить число с плавающей точкой на вашу известную точность и использовать по модулю (%), как это предлагается другими авторами.