Python中的十进制值被截断

2024-09-25 00:32:38 发布

您现在位置: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。你知道吗

你能帮我得到原值而不被截断吗。你知道吗


Tags: 代码nameifbinusrupdateresresult
3条回答

一种解决方案是使用repr

print repr(score_list[0])

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

最重要的是:a)你到底是怎么得到这个数字的(这是某种计算的结果吗?我非常怀疑有人有那么精确的薪水;),和b)你打算用它做什么(只是打印出来?用它来计算?…)根据这些问题的答案,我可以推荐最好的方法。你知道吗

例如,如果您只想打印它,“28.86823689842918”就足够了。如果你打算用它来做14位精度的计算,28.8682368984就足够了。如果你想让它表现得像一个“学校”的十进制数,十进制('28.86823689842918')就足够了。你知道吗

如果它是某个计算的结果,也许真正的表现是记住计算本身,而不是它的结果。等等。你知道吗

from decimal import Decimal

res = {u'salary': Decimal('28.86823689842918'), u'name': u'john'}

相关问题 更多 >