У числа с плавающей запятой должно быть 5 ведущих чисел и не должно быть десятичных

Мне нужно преобразовать введенный пользователем float в 5-значное число, которое не имеет десятичных дробей, чтобы вычислить мантиссу и экспоненту float

Пример:- Ввод: 12 Мантисса: 12000 Экспонента: -3

но я могу только найти информацию о math.frexp(x) который я не могу использовать для моего назначения. По сути, мне нужен способ преобразования входных данных пользователя в пятизначную мантиссу, но у меня совершенно нет идей, и я не могу понять, как правильно преобразовать число с плавающей запятой, чтобы оно работало в расчетах для показателя степени. любая помощь будет оценена.

2 ответа

Я не уверен, правильно ли это, если вы найдете количество цифр на входе, а затем умножите вход на необходимые степени 10, вы получите мантиссу.

Я не очень склонен дать вам именно то, что вам нужно (чтобы помочь вам учиться самостоятельно), но если вы изучите следующий код, вы можете получить то, что вам нужно.

def func(user_input):
    user_in = str(user_input)
    if not '.' in user_in: # Make the input as float
        user_in = user_in + '.'
    try:
        float(user_in)
    except:
        return ValueError

    decimal_pos = user_in.find('.')
    no_digits = decimal_pos

    if no_digits == 5:
        exponent = 0
        mantissa = int(user_in[:decimal_pos])
    elif no_digits > 5:
        exponent = 5 - no_digits
        mantissa = int(user_in[:decimal_pos])//(10**(-exponent))
    else:
        if no_digits == 1 and user_in[0] == '0':
            exponent = 5
        else:
            exponent = 5 - no_digits

        if len(user_in) >= decimal_pos+exponent+2:
            mantissa = int(user_in[:decimal_pos+exponent+2].replace('.',''))
        else:
            mantissa = int(user_in.replace('.','')) * (10**(decimal_pos+exponent+1 - len(user_in)))

    if float(user_in) == 0:
        exponent = 0
        mantissa = 0

    return mantissa, exponent

for a in (1.2345, 0.12345, 12, 12345, 123456, 123456.78):
    print a, func(a)

Выход выше

1.2345 (12345, 4)
0.12345 (12345, 5)
12 (12000, 3)
12345 (12345, 0)
123456 (12345, -1)
123456.78 (12345, -1)
Другие вопросы по тегам