我需要将用户输入的浮点数转换为没有小数的 5 位数字来计算浮点数的尾数和指数
示例:- 输入:12 尾数:12000 指数:-3
但我只能找到math.frexp(x)
我不能用于我的作业的信息。基本上我需要一种将用户输入转换为 5 位尾数的方法,但我完全没有想法,无法弄清楚如何正确转换浮点数,以便它将在指数计算中起作用。任何帮助,将不胜感激。
我需要将用户输入的浮点数转换为没有小数的 5 位数字来计算浮点数的尾数和指数
示例:- 输入:12 尾数:12000 指数:-3
但我只能找到math.frexp(x)
我不能用于我的作业的信息。基本上我需要一种将用户输入转换为 5 位尾数的方法,但我完全没有想法,无法弄清楚如何正确转换浮点数,以便它将在指数计算中起作用。任何帮助,将不胜感激。
我不太愿意准确地给你你需要的东西(帮助你自己学习),但是如果你研究下面的代码,你可能会得到你需要的东西。
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)
我不确定它是否正确,如果您找到输入中的位数,然后将输入乘以所需的 10 次幂,则得到尾数。