12

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

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

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

谷歌搜索把我带到了十进制,但十进制没有帮助。

请结束这种折磨,告诉我我必须做什么1/3才能出现.333

编辑谢谢大家清除它!显然,计算机科学家发明了一种叫做整数除法的东西来迷惑和激怒数学家。谢谢你好心驱散了我的困惑。

4

5 回答 5

21

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

1.0/3.0

或者:

from __future__ import division

这将进行/真正的除法和//整数除法。这是 Python 3 的默认设置。

于 2012-07-15T00:47:50.667 回答
7

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

 1 / 3

给你:

 0

为了避免这个问题,至少有一个操作数需要是浮点数。例如,1.0 / 31 / 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
于 2012-07-15T00:48:29.603 回答
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
于 2012-07-15T00:48:08.457 回答
2

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

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

在 Python3 中,它们似乎默认不执行整数除法,所以你可以这样做:

>>> a = 1/3
>>> round(a, 3)
0.333
于 2012-07-15T00:52:06.583 回答
1

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

from decimal import *
getcontext().prec = 100
Decimal(1)/Decimal(3)
于 2015-04-06T10:27:58.800 回答