```python
import decimal
x=[]
#functions etc. x is changed
#now returns is a list full of integers
print(sum(x)/len(x))
#This happens to give 0.6999
print(decimal.Decimal(sum(x)/len(x))
# This happens to give 0.6998999999996034 blah blah blah
```
十进制模块给出的小数位数过多,而舍入(decimal.Decimal(x),5)得出0.69990
我希望它输出0.69999(5 d.p.),但输出0.6999或0.69990
答案 0 :(得分:1)
您可以尝试这样的事情
x=0.6999932
g = float("{0:.5f}".format(x))
print(g)
#output be like
0.69999
答案 1 :(得分:1)
您已经有了正确的答案:round(decimal.Decimal(x),5)
给出了0.69990
。在您的情况下,您不应期望0.69999
,甚至还不接近0.699899999999
。
python内置函数round
很好用,但有时可能令人惊讶,请参阅更多详细信息here
总结:
import decimal
x=0.699899999
print("x =", x)
g = round(decimal.Decimal(x),5)
print("rounded:", g)
输出:
x = 0.699899999
rounded: 0.69990
答案 2 :(得分:0)
在数学上,数字0.699899999999...
与0.6999000...
等效,假设9
的重复次数比我们想舍入前要重复的次数远。
这与为什么0.9999...
等于1
(对于这个问题您可以在网上找到许多解释,我很喜欢this one)的问题相同,只是转移了右边的小数点后几位。最后的所有9
都变成了1
。那个被添加到最后一个8
并将其变成9
。所有这些后面都跟着无限零,Python默认会忽略该零。