Eri*_*got 9 python python-2.x integer-division floor python-3.x
//
Python 的"整数除法"运算符让我感到惊讶,今天:
>>> math.floor(11/1.1)
10.0
>>> 11//1.1
9.0
Run Code Online (Sandbox Code Playgroud)
该文档读取"x和y"的"(浮动)商".那么,为什么math.floor(11/1.1)等于10,但是11 // 1.1等于9?
因为1.1不能以二进制形式准确表示; 近似值小于1.1 - 因此除法结果有点太小.
请尝试以下方法:
在Python 2下,在控制台键入:
>>> 1.1
1.1000000000000001
Run Code Online (Sandbox Code Playgroud)
在Python 3.1中,控制台将显示1.1
,但在内部,它仍然是相同的数字.
但:
>>> 11/1.1
10.0
Run Code Online (Sandbox Code Playgroud)
正如gnibbler指出的那样,这是浮点数可用精度限制内"内部舍入"的结果.正如MYYN在他的评论中指出的那样,//
使用不同的算法来计算分层结果,而不是math.floor()
为了尽可能保留a == (a//b)*b + a%b
.
Decimal
如果需要此精度,请使用该类型.
归档时间: |
|
查看次数: |
6936 次 |
最近记录: |