我正在尝试开发一个简单的程序,找到等于其数字平均值的十进制数。实施例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)))
答案 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