为什么列表中的变量不打印到小数点后3位?

1 投票
2 回答
53 浏览
提问于 2025-04-13 02:49

当我把第一个参数设置为小于三位小数时,想把它转换成三位小数,但它就是不行。它只会按照我写的样子添加到列表里。如果值是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]

撰写回答