Python 如何在整数算术中执行上限除法?

Python 如何在整数算术中执行上限除法?,python,rounding,integer-arithmetic,Python,Rounding,Integer Arithmetic,它基本上是把你需要的箱子退出来。1个盒子可以容纳10个项目。因此,如果用户输入的项目是102,那么代码应该返回11个框 如果余数为非零,是否有一种向上舍入的除法?对于您的用例,请使用整数算术。有一种简单的技术可以将整型地板分区转换为天花板分区: from math import ceil print(ceil(10.3)) 11 items = 102 boxsize = 10 num_boxes = (items + boxsize - 1) // boxsize num_boxes

它基本上是把你需要的箱子退出来。1个盒子可以容纳10个项目。因此,如果用户输入的项目是102,那么代码应该返回11个框


如果余数为非零,是否有一种向上舍入的除法?

对于您的用例,请使用整数算术。有一种简单的技术可以将整型地板分区转换为天花板分区:

from math import ceil

print(ceil(10.3))

11
items = 102
boxsize = 10
num_boxes = (items + boxsize - 1) // boxsize
num_boxes = -(items // -boxsize)
或者,使用否定将楼层划分转换为天花板划分:

items = 102
boxsize = 10
num_boxes = (items + boxsize - 1) // boxsize
num_boxes = -(items // -boxsize)
您可以尝试:

import math
math.ceil( x )

前后否定

>>> -(-102 // 10)
11

这就是您想要的吗?ceil(10.4)使用“将地板分割转换为天花板分割”操作符,拼写为“-0-”示例用法:
--0--102//10
->
11
。(试试看!)
。更严重的是,这只是Stefan Pochmann答案上的一个伪装变体,它不仅给出了整数的正确结果,而且还正确地扩展到了其他数字类型,如
浮点
分数
。对于解析它的任何其他人来说:它解析为
-(.0)-(.102)//10
。使用
0--102//10
也可以达到同样的效果
--102//10
失败,因为它解析为
((-102))//10
。不要这样做!一旦你使用浮点运算,你就让不准确的魔鬼进来了。它在正常使用情况下可以工作,但是如果你开始使用长数字(二进制表示法中超过48位),整数不能用IEE-754双精度数字精确表示。我会记住这一点。我认为我们的讲师希望我们使用这种技术,而不是使用ceil,因为ceil尚未在讲座中介绍。谢谢:)这个答案我不太清楚-可能是因为问题不太清楚,也许这有助于澄清显示的内容,使用上面变量名的值,102/10是10.2;使用整数除法,102/10为10,但不使用数学库或浮点数而向上增加到11,则上述任一解决方案都起作用,因此这两个方案都会给出11:(102 +10 - 1)//10或--(102//-10),如果您需要知道为什么需要-1,考虑一下发生了什么事,而101I认为这个解决方案比“添加分母-1”一个,因为它扩展到浮点数而无需修改。