For exactness, use the decimal class. My take on the program using decimal. Note that decimal.Decimal is imported as "dec" to avoid confusion with the variable names. Also, I am not a decimal class expert and so use divmod to get the integer and remainder/decimal portions of a number. There are probably other ways, some of which may be better. Finally, using the decimal class is much slower than floats but is not noticeable for the normal type operations.
from decimal import Decimal as dec
def extractDecimals(num):
""" the variable 'num' is expected to be a decimal.Decimal
"""
try:
whole, remainder = divmod(num, 1)
print "whole =", whole, " remainder =", remainder
if remainder > 0:
decimals = num - whole
ctr = 0
while (decimals > whole) and (ctr < 100):
ctr += 1
decimals *= 10
whole, remainder = divmod(decimals, 1)
print 'decimal: ' + str(decimals),
print ' int: ' + str(whole)
return int(decimals)
else:
raise DecimalError(num)
except DecimalError, e:
e.printErrorMessage()
extractDecimals(dec("0.988"))