在一次真正超现实的体验中,我花了 20 分钟完成一项我认为需要 20 秒的任务。
我想使用 3 位或更多位的小数。我不能得到任何超过 1 位的东西,即使在那种情况下,这也是无稽之谈。
例如,我无法显示为or1/3
以外的任何内容。0
0.0
谷歌搜索把我带到了十进制,但十进制也没有帮助。
请结束这种折磨,告诉我我必须做什么1/3
才能出现.333
!
编辑谢谢大家清除它!显然,计算机科学家发明了一种叫做整数除法的东西来迷惑和激怒数学家。谢谢你好心驱散了我的困惑。
在一次真正超现实的体验中,我花了 20 分钟完成一项我认为需要 20 秒的任务。
我想使用 3 位或更多位的小数。我不能得到任何超过 1 位的东西,即使在那种情况下,这也是无稽之谈。
例如,我无法显示为or1/3
以外的任何内容。0
0.0
谷歌搜索把我带到了十进制,但十进制也没有帮助。
请结束这种折磨,告诉我我必须做什么1/3
才能出现.333
!
编辑谢谢大家清除它!显然,计算机科学家发明了一种叫做整数除法的东西来迷惑和激怒数学家。谢谢你好心驱散了我的困惑。
在 Python 2 中,1/3
会进行整数除法,因为两个操作数都是整数。你需要做浮点除法:
1.0/3.0
或者:
from __future__ import division
这将进行/
真正的除法和//
整数除法。这是 Python 3 的默认设置。
如果你将 2 个整数相除,你最终会得到一个截断的整数结果(即,结果的任何小数部分都被丢弃),这就是为什么
1 / 3
给你:
0
为了避免这个问题,至少有一个操作数需要是浮点数。例如,1.0 / 3
或1 / 3.0
或(当然)1.0 / 3.0
将避免整数截断。顺便说一下,这种行为并不是 Python 独有的。
(编辑:正如@Ivc 在下面的有用评论中所提到的,如果整数操作数之一为负数,则结果是floor() 'ed - 请参阅这篇文章了解原因)。
此外,数字的内部和外部表示可能存在一些混淆。数字是什么,但我们可以确定它的显示方式。
您可以使用格式说明控制外部表示。例如,一个数字可以在小数点后显示 5 位数字,如下所示:
n = 1/3.0
print '%.5f' %n
0.33333
获取小数点后 15 位。
print '%.15f' %n
0.333333333333333
最后,有一种“新的和改进的”使用该函数格式化字符串/数字的方法,它的使用时间可能比我上面显示的 -formatting.format()
长得多。%
一个例子是:
print 'the number is {:.2}'.format(1.0/3.0)
会给你:
the number is 0.33
您的值需要是一个浮点数
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
在 Python2 中,您必须将至少一个操作数指定为浮点数。要仅取 3 位小数,您可以使用以下round()
方法:
>>> a = 1.0 / 3
>>> round(a, 3)
0.333
在 Python3 中,它们似乎默认不执行整数除法,所以你可以这样做:
>>> a = 1/3
>>> round(a, 3)
0.333
使用十进制。您可以在点后面获得 100 位数字。
from decimal import *
getcontext().prec = 100
Decimal(1)/Decimal(3)