你如何在python中得到一个小数?

时间:2012-07-15 00:45:44

标签: python

在一次真正超现实的体验中,我花了20分钟完成了一项我认为需要20秒的任务。

我想使用3个或更多位置的小数。我无法获得超过1个地方的任何东西,即使在那种情况下,这也是无稽之谈。

例如,我无法将1/3显示为00.0以外的任何内容。

谷歌搜索引导我进入十进制,但十进制无法提供帮助。

请结束这种折磨并告诉我要让1/3显示为.333我必须做些什么!

编辑谢谢大家清除它!显然,计算机科学家发明了一种称为整数除法的东西来混淆和激怒数学家。谢谢你能够消除我的困惑。

5 个答案:

答案 0 :(得分:20)

在Python 2中,1/3执行整数除法,因为两个操作数都是整数。你需要做浮动部门:

1.0/3.0

或者:

from __future__ import division

这将使/进行实际除法,//进行整数除法。这是Python 3的默认设置。

答案 1 :(得分:7)

如果你除2个整数,你最终会得到一个截断的整数结果(即,结果的任何小数部分被丢弃),这就是为什么

 1 / 3

给你:

 0

为了避免这个问题,至少其中一个操作数需要是一个浮点数。例如,1.0 / 31 / 3.0或(当然)1.0 / 3.0将避免整数truncation。顺便说一下,这种行为并不是Python独有的。

编辑:正如@Ivc在下面的有用评论中所提到的,如果其中一个整数操作数为否定,则结果为floor() - 请参阅this article原因。

此外,对于数字的内部外部表示可能存在一些混淆。数字就是这样,但我们可以确定它的显示方式。

您可以使用格式说明控制外部表示。例如,一个数字可以在小数点后面显示5位数字,如下所示:

n = 1/3.0

print '%.5f' %n
0.33333

要获得小数点后的15位数字。

print '%.15f' %n
0.333333333333333

最后,有一种使用.format()函数格式化字符串/数字的“新的和改进的”方式,它可能比% - 我上面显示的格式更长。一个例子是:

print 'the number is {:.2}'.format(1.0/3.0)

会给你:

the number is 0.33

答案 2 :(得分:2)

您的价值必须是一个浮点

In [1]: 1/3
Out[1]: 0

In [2]: 1/3.0
Out[2]: 0.33333333333333331

In [1]: from __future__ import division

In [2]: 1/3
Out[2]: 0.33333333333333331

答案 3 :(得分:2)

在Python2中,您必须至少指定一个操作数作为浮点数。要只取3位小数,您可以使用round()方法:

>>> a = 1.0 / 3
>>> round(a, 3)
0.333

在Python3中,默认情况下它们似乎不执行整数除法,因此您可以这样做:

>>> a = 1/3
>>> round(a, 3)
0.333

答案 4 :(得分:1)

使用十进制。您可以在点后面获得100位数字。

from decimal import *
getcontext().prec = 100
Decimal(1)/Decimal(3)