Python中类似Excel的向上取整函数是什么?

11

我知道 math.ceilnumpy.ceil,但它们都缺少 significance 参数。

例如,在 Excel 中:

=Ceiling(210.63, 0.05) -> 210.65

而在 numpy.ceil 和 math.ceil 中:

numpy.ceil(210.63) -> 211.0

math.ceil(210.63) -> 211.0

因此,我想知道是否已经有类似于 Excel 解决方案的东西?

3个回答

11

我不知道有任何 Python 函数可以实现这个功能,但您可以轻松编写一个:

import math

def ceil(x, s):
    return s * math.ceil(float(x)/s)

在Python 2中,将整数转换为浮点数是必要的,以避免两个整数相除时出现整数除法。你也可以使用from __future__ import division。在Python 3中不需要这样做。


1
怎么会这么明显,我没想到呢 o_O。谢谢。 - Vladimiroff
1
ceil(212, 10) 返回 210,即使它应该返回 220。在 Python 2.x 中,整数除法默认为整数。我在我的答案中遇到了类似的问题(但不完全相同),必须使用 1.0 强制执行浮点除法。 - rplnt
你说得对,我没有考虑到这一点,因为现在我主要使用Python3编程。我编辑了答案以强制转换为浮点数。 - madjar

0

你可以这样做。

ceil = lambda x,y: math.ceil(x*(1.0/y))/(1.0/y)

但这并不是绝对可靠的。


0

有许多库已经在Python中实现了很多Excel公式。

像PyCel、Formulas、xlcalculator和Koala这样的库使用AST将Excel公式转换为Python,因此通常具有各种程度的“Excel如何计算事物”(而不是其他地方可能会做的方式)的预制Python函数实现。至少有关于如何实现这些函数的想法,或者潜在地使用已经定义好函数的那些函数。

我是xlcalculator的项目所有者,所以我将在演示中使用该库。尽管如此,其他库也能够胜任这个特定的任务。每个库都有不同的历史背景,因此它们具有不同的优势并支持不同的Excel函数。

通常上述提到的库会读取一个Excel文件,将公式转换为Python,然后提供评估功能。Xlcalculator还可以解析一个特别设计的字典,这就是我在这里利用的东西。

stackoverflow.py:

input_dict = {
        "Sheet1!A1" : "=Ceiling(210.63, 0.05)"
    }

from xlcalculator import ModelCompiler
from xlcalculator import Model
from xlcalculator import Evaluator

compiler = ModelCompiler()
my_model = compiler.read_and_parse_dict(input_dict)
evaluator = Evaluator(my_model)

print("Sheet1!A1", evaluator.evaluate("Sheet1!A1"))

结果为:

>python stackoverflow.py
Sheet1!A1 210.66

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接