Python:获取十进制库以返回正确的小数?

时间:2018-03-17 14:53:48

标签: python python-3.x decimal nested-loops decimal-point

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

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

当我使用Decimal库进行简单除法时,答案会出现四个小数点,就像我想要的那样:0.2727

但是当我尝试打印循环的平均值时。 (十进制(i + y + z + q))/十进制(4))平均值仅出现在第100个小数点(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)))

2 个答案:

答案 0 :(得分:0)

不能肯定地说,但那些数字(0.25 0.5 0.75)对我来说看起来很“圆”,我的意思是它们只是1 / 4,2 / 4和3/4它们不是有任何其他小数要显示。那么你只能达到百分之一是正常的。 0.5为0.5,无需显示0.5000。

如果你真的想在最后用额外的零显示4位小数,请使用格式化函数。

示例:

print("%.4f" % 0.5)

显示0.5000

答案 1 :(得分:0)

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)