没有数学模块的Python 3中的天花板和地板等效?

Posted

技术标签:

【中文标题】没有数学模块的Python 3中的天花板和地板等效?【英文标题】:Ceil and floor equivalent in Python 3 without Math module? 【发布时间】:2015-09-14 06:56:08 【问题描述】:

我需要在不使用 import math 的情况下对 3/2 结果 (1.5) 进行上限和下限。

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

好的,问题来了: 将所有数字相加 15 + 45 + 15 + 45 + 15 ... 有 N 个项目。

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

【问题讨论】:

4/2 的结果错误 为什么不直接使用math 库? 用于教育目的 相信我,我试过了。顺便说一句,我以前用过 php,现在我正在学习 Python :) 使用天花板除法运算符,--0--!这将地板除法转换为天花板除法。例如,--0-- 3//2 给出了3/2 的上限。不信就试试吧! (好吧,所以你可以不带前导 -- 拼写它,但它看起来更好。) 【参考方案1】:
>>> 3/2
1.5
>>> 3//2 # floor
1
>>> -(-3//2) # ceil
2

【讨论】:

有趣的是 >>>math.ceil(4.0000000000000001/2) 是 2,但 >>>math.ceil(4.000000000000001/2) 是 3 但并不奇怪,当您认为 4.0000000000000001 == 4.0True4.000000000000001 == 4.0 是 False 时【参考方案2】:

试试

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

def floor(n):
    return int(n // 1)

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

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

【讨论】:

【参考方案3】:

试试:

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

【讨论】:

这个floor 的定义被破坏了:它对于负整数不能正常工作。【参考方案4】:

试试看:

if a%b != 0:
  print(int(a//b + 1))
else:
  print(int(a/b))

【讨论】:

以上是关于没有数学模块的Python 3中的天花板和地板等效?的主要内容,如果未能解决你的问题,请参考以下文章

在解决重复问题时,地板和天花板何时重要?

在二叉搜索树中查找地板和天花板

使用 Revit API 移动天花板或地板图案

java 中常用的类

js内置对象-Math对象

Python内置数据类型