Converting float from arbitrary base to arbitrary base
It is not necessary to deal separately with the integral and fractional parts.


When converting from string, remove the point, convert as integer and scale according to the position where the point was.
When converting to string, scale to integer, convert and insert point in the right place.


Here's how you can implement convert with _int_to_base as the only helper function:

def convert(number, original_base, new_base, precision=None):
    #from original_base
    integral, point, fractional = number.strip().partition('.')
    num = int(integral + fractional, original_base) * original_base ** -len(fractional)

    #to new_base
    precision = len(fractional) if precision is None else precision
    s = _int_to_base(int(round(num / new_base ** -precision)), new_base)
    if precision:
        return s[:-precision] + '.' + s[-precision:]
    else:
        return s