在一次真正超现实的体验中,我花了20分钟完成了一项我认为需要20秒的任务.
我想使用3个或更多位置的小数.我无法获得超过1个地方的任何东西,即使在那种情况下,这也是无稽之谈.
例如,我无法1/3显示除0or 之外的任何内容0.0.
谷歌搜索引导我到十进制,但十进制也没有帮助.
请结束这种折磨并告诉我要做什么1/3才能出现.333!
编辑谢谢大家清除它!显然,计算机科学家发明了一种称为整数除法的东西来混淆和激怒数学家.谢谢你能够消除我的困惑.
Set*_*gie 20
在Python 2中,进行1/3整数除法,因为两个操作数都是整数.你需要做浮动分裂:
1.0/3.0
Run Code Online (Sandbox Code Playgroud)
要么:
from __future__ import division
Run Code Online (Sandbox Code Playgroud)
哪个会/做真正的划分并//做整数除法.这是Python 3的默认设置.
如果你除2个整数,你最终会得到一个截断的整数结果(即结果的任何小数部分被丢弃),这就是为什么
1 / 3
Run Code Online (Sandbox Code Playgroud)
给你:
0
Run Code Online (Sandbox Code Playgroud)
为了避免这个问题,至少有一个操作数需要是一个浮点数.例如,1.0 / 3或1 / 3.0(当然)1.0 / 3.0将避免整数截断.顺便说一下,这种行为并不是Python独有的.
(编辑:正如@Ivc在下面的有用评论中所提到的,如果其中一个整数操作数为负数,则结果为floor() ' - 请参阅此文章的原因).
此外,对于数字的内部和外部表示可能存在一些混淆.数量是它是什么,但我们能确定它是如何显示的.
您可以使用格式说明控制外部表示.例如,一个数字可以显示小数点后的5位数,如下所示:
n = 1/3.0
print '%.5f' %n
0.33333
Run Code Online (Sandbox Code Playgroud)
要获得小数点后的15位数.
print '%.15f' %n
0.333333333333333
Run Code Online (Sandbox Code Playgroud)
最后,有一种"新的和改进的"使用.format()函数格式化字符串/数字的方式,它可能比%我上面显示的格式化时间长得多.一个例子是:
print 'the number is {:.2}'.format(1.0/3.0)
Run Code Online (Sandbox Code Playgroud)
会给你:
the number is 0.33
Run Code Online (Sandbox Code Playgroud)