【发布时间】:2011-12-21 20:31:09
【问题描述】:
我如何获得 1324343032.324?
如下所示,以下方法不起作用:
>>1324343032.324325235 * 1000 / 1000
1324343032.3243253
>>int(1324343032.324325235 * 1000) / 1000.0
1324343032.3239999
>>round(int(1324343032.324325235 * 1000) / 1000.0,3)
1324343032.3239999
>>str(1324343032.3239999)
'1324343032.32'
【问题讨论】:
-
集合中没有这样的浮点数表示的值。
-
如果 Karl 的评论不够清楚:二进制浮点中 没有像 1324343032.324 这样的数字。如果您切换到更高版本的 Python(2.7 或 3.1 或更高版本),解释器将为您显示 1324343032.324。但实际上,无论 Python 版本如何,您计算的数字既不是 1324343032.324 也不是 1324343032.3239999。获得准确 1324343032.324 的唯一方法是使用
decimal模块或其他一些任意精度的数学库,例如gmpy。 -
如果您想四舍五入(向上)到给定的小数位数,下面接受的答案是正确的。但是,问题是什么,我想知道的是如何截断到特定的小数位数。对我来说,
'%.3f'%(1324343032.3243)和'%.3f'%(1324343032.3245)给出不同的结果。 (我使用的是 Python 2.7.8)。 -
@nullstellensatz stackoverflow.com/questions/783897/truncating-floats-in-python
-
@AbhranilDas 这个问题与您所指的问题重复。由于这两个问题的答案都具有误导性,因此我将其标记为重复,以便可以在一个地方处理与截断相关的所有问题。另外,请查看我的 cmets 和原始问题的建议答案。
标签: python