在一次真正超现实的体验中,我花了20分钟完成了一项我认为需要20秒的任务。
我想使用3个或更多位置的小数。我无法获得超过1个地方的任何东西,即使在那种情况下,这也是无稽之谈。
例如,我无法将1/3
显示为0
或0.0
以外的任何内容。
谷歌搜索引导我进入十进制,但十进制也无法提供帮助。
请结束这种折磨并告诉我要让1/3
显示为.333
我必须做些什么!
编辑谢谢大家清除它!显然,计算机科学家发明了一种称为整数除法的东西来混淆和激怒数学家。谢谢你能够消除我的困惑。
答案 0 :(得分:20)
在Python 2中,1/3
执行整数除法,因为两个操作数都是整数。你需要做浮动部门:
1.0/3.0
或者:
from __future__ import division
这将使/
进行实际除法,//
进行整数除法。这是Python 3的默认设置。
答案 1 :(得分:7)
如果你除2个整数,你最终会得到一个截断的整数结果(即,结果的任何小数部分被丢弃),这就是为什么
1 / 3
给你:
0
为了避免这个问题,至少其中一个操作数需要是一个浮点数。例如,1.0 / 3
或1 / 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)