def convert(operand, inputBase, outputBase):
    #correct edge case of having only a decimal before the num
    if '.' in operand:
        idx = operand.index('.')
        if idx == 0:
            operand = '0' + operand[idx:]
        elif idx == 1 and operand[0] == '-':
            operand = '-0' + operand[1:]

    # input is Decimal
    if inputBase == Base.decimal:
        if outputBase == Base.decimal:
            return operand
        elif outputBase == Base.hexadecimal:
            return decToHex(operand)
        elif outputBase == Base.binary:
            return decToBin(operand)
        elif outputBase == Base.sem:
            return binsem(operand)

    #input is Hex
    elif inputBase == Base.hexadecimal:
        if outputBase == Base.decimal:
            return hexToDec(operand)
        elif outputBase == Base.hexadecimal:
            return operand
        elif outputBase == Base.binary:
            return hexToBin(operand)
        elif outputBase == Base.sem:
            return binsem(hexToDec(operand))

    # input is Binary
    elif inputBase == Base.binary:
        if outputBase == Base.decimal:
            return binToDec(operand)
        elif outputBase == Base.hexadecimal:
            return binToHex(operand)
        elif outputBase == Base.binary:
            return operand
        elif outputBase == Base.sem:
            return binsem(binToDec(operand))

    #input is SEM
    elif inputBase == Base.sem:
        if outputBase == Base.decimal:
            return flsem(operand)
        elif outputBase == Base.hexadecimal:
            return decToHex(normalize(flsem(operand)))
        elif outputBase == Base.binary:
            return decToBin(normalize(flsem(operand)))
        elif outputBase == Base.sem:
            return operand
def decToBin( n ):
    isNegative = False
    if n[0] == '-':
        isNegative = True
        n = n[1:]
    n = normalize(n)
    if '.' in n:
        pL = n.find('.')    # location of point
        integer = n[:pL]    
        fraction = n[pL+1:]
        integer = bin(int(integer))[2:] + '.'
        fraction = float(n) - int( float(n) )
        counter = 32
        while counter > 0 and fraction != 0:
            fraction *= 2
            if fraction >= 1:
                integer = integer + str(int(fraction))
                fraction -= int(fraction)
            else:
                integer = integer + '0'
            counter -= 1
        num = removeInsignificantZeroes(integer)
        return ('-' + num) if isNegative else num
    else:
        b = bin(int(n))[2:]
        return ('-' + b) if isNegative else b
def decToHex( n ):
    isNegative = False
    if n[0] == '-':
        isNegative = True
        n = n[1:]
    n = normalize(n)
    if '.' in n:
        pL = n.find('.')
        integer = n[:pL]
        fraction = n[pL+1:]
        integer = hex(int(integer))[2:] + '.'
        fraction = float(n) - int(float(n))
        counter = 32
        while counter != 0 and fraction != 0:
            fraction *= 16
            if fraction >= 1:
                if int(fraction) == 10:
                    integer = integer + 'a'
                elif int(fraction) == 11:
                    integer = integer + 'b'
                elif int(fraction) == 12:
                    integer = integer + 'c'
                elif int(fraction) == 13:
                    integer = integer + 'd'
                elif int(fraction) == 14:
                    integer = integer + 'e'
                elif int(fraction) == 15:
                    integer = integer + 'f'
                elif int(fraction) <= 9:
                    integer = integer + str(int(fraction))
                fraction -= int(fraction)
            else:
                integer = integer + '0'
            counter -= 1
        num = removeInsignificantZeroes(integer)
        return ('-'+num) if isNegative else num
    else:
        h = hex(int(n))[2:]
        return ('-' + h) if isNegative else h