我有两个相同长度的列表:
[1,2,3,4] 和 [a,b,c,d]
我想创建一个我所拥有的字典 {1:a, 2:b, 3:c, 4:d}
最好的方法是什么?
代码
import numpy as np
a = 5.92270987499999979065
print(round(a, 8))
print(round(np.float64(a), 8))
Run Code Online (Sandbox Code Playgroud)
给
5.92270987
5.92270988
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?
在numpy来源中找不到任何相关内容.
更新:
我知道处理这个问题的正确方法是以这种差异无关紧要的方式构建程序.我做的.我在回归测试中偶然发现了它.
Update2:
关于@VikasDamodar评论.人们不应该相信这个repr()功能:
>>> np.float64(5.92270987499999979065)
5.922709875
>>> '%.20f' % np.float64(5.92270987499999979065)
'5.92270987499999979065'
Run Code Online (Sandbox Code Playgroud)
Update3:
在python3.6.0 x32,numpy 1.14.0,win64上测试.另外在python3.6.4 x64,numpy 1.14.0,debian.
Update4:
只是为了确定:
import numpy as np
a = 5.92270987499999979065
print('%.20f' % round(a, 8))
print('%.20f' % round(np.float64(a), 8))
5.92270987000000026512
5.92270988000000020435
Run Code Online (Sandbox Code Playgroud)
Update5:
以下代码演示了在不使用str以下情况下发生差异的阶段:
>>> np.float64(a) - 5.922709874
1.000000082740371e-09
>>> a - 5.922709874
1.000000082740371e-09
>>> round(np.float64(a), 8) - 5.922709874
6.000000496442226e-09
>>> round(a, 8) - …Run Code Online (Sandbox Code Playgroud)