关于Floats在字典中显示时的打印方式不同:当在字典 – python中显示时,Floats的打印方式不同

Floats print differently when shown in dictionary - python

我正在用以下简单代码创建字典:

1
2
3
4
5
6
7
8
9
10
pixel_histogram = {}
min_value = -0.2
max_value = 0.2
interval_size = (math.fabs(min_value) + math.fabs(max_value))/bins

for i in range(bins):
    key = min_value+(i*interval_size)
    print key
    pixel_histogram[key] = 0
    print pixel_histogram

但我有点惊讶,因为我的指纹上有这些值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#Printing keys
-0.2
-0.16
-0.12
-0.08
-0.04
0.0
0.04
0.08
0.12
0.16

#Printing the dictionary
{0.0: 0,
-0.08000000000000002: 0,
0.15999999999999998: 0,
-0.16: 0,
0.12: 0,
-0.12000000000000001: 0,
0.08000000000000002: 0,
-0.04000000000000001: 0,
-0.2: 0,
0.03999999999999998: 0}

我不明白为什么值是不同的,我如何解决这个问题。任何帮助都将不胜感激。谢谢。


python的print语句在正在打印的项目上使用str()。对于浮点值,str()将打印一定数量的十进制值。

打印字典时,print语句在字典对象上调用str()。字典在其__str__()方法定义中,对键使用repr()。浮点值的repr()函数比str()函数打印的小数位更多。

字典使用repr()而不是str()作为键的原因是您几乎肯定希望看到print {'1': 1}的打印方式与print {1: 1}的打印方式不同。


值相同。在第一种情况下,它们被截断或四舍五入为小数位。你一定熟悉数字的四舍五入吗?