为什么列表中的变量不打印到小数点后3位?
当我把第一个参数设置为小于三位小数时,想把它转换成三位小数,但它就是不行。它只会按照我写的样子添加到列表里。如果值是9.13,它在列表中不会显示成9.130,而还是9.13。我试过用round
函数、格式化等等。另外,当一个整数被添加到列表时,它只会显示到一位小数。例如,27只会显示成27.0,而不是27.000。
import math
def generate_num(LowNum, HighNum):
try:
LowNum = float(LowNum)
HighNum = float(HighNum)
except ValueError:
return False
except KeyboardInterrupt:
quit()
LowNum = round(LowNum, 3)
sequence = [LowNum]
j = sequence[-1]
while j <= HighNum:
i = (math.sqrt((j) ** 3))
i = round(i, 3)
if i <= HighNum:
sequence.append(i)
j = i
else:
break
return sequence
print(generate_num(9, 923))
2 个回答
0
round()这个函数在打印列表的时候并不会决定数字的格式。它只是把数字四舍五入到小数点后三位。比如9.13四舍五入到三位小数,还是9.13。如果我理解得没错,你是想让所有的数字都显示成恰好三位小数的样子。为此,你需要使用某种字符串格式表达式。比如,你可以用这个来替代print():
for num in generate_num(9,923):
print(f'{num:.3f}')
根据你的喜好,你也可以像打印列表那样,手动加上括号和逗号来打印。
1
round()
函数会改变数字的 值。而格式化则是控制数字的 显示方式:
>>> n = 3.00256
>>> n
3.00256
>>> m = round(n,3) # Make a new rounded number
>>> m
3.003
>>> n
3.00256
>>> m==n
False
>>> m = round(n,2)
>>> m
3.0
>>> n
3.00256
>>> m==n
False
>>> print(f'{n:.3f}') # Display to 3 places
3.003
>>> print(f'{n:.2f}') # Display to 2 places
3.00
>>> n # n is unchanged
3.00256
如果你想要自定义一个列表的显示方式,那你得自己动手去做:
>>> def display(L):
... print('['+', '.join([f'{n:.3f}' for n in L]) + ']')
...
>>> L = [1.1, 2.22, 3.333, 4.4444, 5.5555]
>>> L
[1.1, 2.22, 3.333, 4.4444, 5.5555]
>>> display(L)
[1.100, 2.220, 3.333, 4.444, 5.556]