Python:让decimal库返回正确数量的小数?

2024-10-01 04:47:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试开发一个简单的程序,它可以找到十进制数等于其位数的平均值。例4.5(4+5=9/2)=4.5

为了做到这一点,我需要取有几个小数点的平均值,并将它们与一个大的十进制数迭代列表进行比较(我使用了一个嵌套循环来实现这一点)。在

当我使用十进制库进行简单除法时,得到的结果是四个小数点,就像我想要的:0.2727

但当我试图打印循环的平均值时。(十进制(i+y+z+q))/十进制(4))平均值仅为小数点的百分之一百(0.25 0.5 0.75等)。为什么?在传递到Decimal()之前,我尝试过转换为str()和int(),但它不起作用。在

from decimal import *
getcontext().prec = 4

print(Decimal(3)/Decimal(9))


numbers1to10 = [0,1,2,3,4,5,6,7,8,9]

for i in numbers1to10:
    for y in numbers1to10:
        for z in numbers1to10:
            for q in numbers1to10:
                if: (Decimal(i + y + z + q)) / Decimal(4)) == ((Decimal(i))+ (Decimal(y)/10) + (Decimal(z)/100)+ (Decimal(q)/1000)):
                    print (((Decimal(i))+ (Decimal(y)/10) + (Decimal(z)/100) + (Decimal(q)/1000)))

Tags: infrom程序列表forint平均值嵌套循环
2条回答

0.5尽可能精确。如果要在打印期间确保固定宽度,请使用string formatting

a = decimal.Decimal(2)/decimal.Decimal(4)
print(f'{a:1.4f}')    #Python v3.6+
print('{:1.4f}'.format(a))

>>>
0.5000
0.5000

Formatted String Literals (new in version 3.6)

不能肯定,但这些数字(0.25 0.5 0.75)在我看来很“圆”,我的意思是它们只有1/4、2/4和3/4,而且它们没有任何其他小数。那么你只到第一百次就很正常了。0.5等于0.5,不需要显示0.5000。在

如果您真的想显示4位小数,并在末尾附加0,请使用format函数。在

示例:

print("%.4f" % 0.5)

显示0.5000。在

相关问题 更多 >