没有数学模块的Python 3中的Ceil和floor等效?

zoo*_*oks 12 python python-3.x

我需要ceil和floor 3/2结果(1.5)而不使用import math.

math.floor(3/2)=> 3//2 math.ceil(3/2)=>?

好的,问题在于:将所有数字加上15 + 45 + 15 + 45 + 15 ...加N项.

sum = (n//2) * 5 + int(n/2) * 15

bak*_*kar 25

>>> 3/2
1.5
>>> 3//2
1
>>> -(-3//2)
2
Run Code Online (Sandbox Code Playgroud)

  • 但毫不奇怪,当你认为 `4.0000000000000001 == 4.0` 是 `True` 而 `4.000000000000001 == 4.0` 是 False (5认同)
  • 我没有注意到@bakar改变了他的答案。现在工作正常。 (2认同)
  • 有趣的是 `>>>math.ceil(4.0000000000000001/2)` 是 2,但是 `>>>math.ceil(4.0000000000000001/2)` 是 3 (2认同)
  • 根据上面的两条评论,是否可以肯定地说这两种方法不可靠? (2认同)

far*_*778 9

我知道这已经很旧了......但你也可以这样称呼它们:

>>> (3/2).__ceil__()
2
>>> (3/2).__floor__()
1
Run Code Online (Sandbox Code Playgroud)

编辑:这适用于 python 3.9 及以上版本


小智 6

尝试

def ceil(n):
    return int(-1 * n // 1 * -1)

def floor(n):
    return int(n // 1)
Run Code Online (Sandbox Code Playgroud)

我使用 int() 使值成为整数。由于天花板和地板是一种四舍五入,我认为整数是合适的返回类型。

整数除法 //, 转到数轴左侧的下一个整数。因此,通过使用 -1,我切换方向以获得天花板,然后使用另一个 * -1 返回原始标志。数学是从左到右完成的。


acw*_*668 5

尝试:

def ceil(n):
    res = int(n)
    return res if res == n or n < 0 else res+1

def floor(n):
    res = int(n)
    return res if res == n or n >= 0 else res-1
Run Code Online (Sandbox Code Playgroud)

  • 这个“下限”定义被破坏了:它不能正确地处理负整数。 (3认同)