在Python列表中截断的十进制值

时间:2015-08-24 06:58:19

标签: python

以下是我的代码:

#!/usr/bin/python
res = {u'salary': 28.86823689842918, u'name': u'john'}
result = {}
score_list = []

result.update(res)
if result[u'name'] == 'john':
    score_list.append(result[u'salary'])
print score_list[0]

打印的预期结果是 28.86823689842918 但我得到28.8682368984。

可以帮助我获取原始值而不会被截断。

2 个答案:

答案 0 :(得分:0)

一种解决方案是使用repr

print repr(score_list[0])

答案 1 :(得分:0)

重要的一点是28.86823689842918不是Python中的十进制值:它是(生成)具有32位精度的二进制浮点值。它没有足够的精度来记住所有这些小数。

最重要的事情是:a)你是如何获得这个数字的(这是一些计算的结果?我非常怀疑某人有一个精确的薪水;),以及b)你打算用它做什么? (只需打印出来?用它计算?...)根据这些问题的答案,我将能够推荐最好的方法。

例如,如果您只想打印它,' 28.86823689842918'够好了。如果你打算用大约14位数的精度进行计算,那么28.8682368984就足够了。如果你打算把它作为一个学校"十进制数,十进制(' 28.86823689842918')就足够了。

如果是某些计算的结果,也许真正的表示是记住计算本身,而不是结果。等等。