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 的解决方案?

4

3 回答 3

11

我不知道有任何 python 函数可以这样做,但您可以轻松编写一个代码:

import math

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

如果两个参数都是整数,则在 python 2 中必须转换为浮点数以避免整数除法。您也可以使用from __future__ import division. 这对于 python 3 是不需要的。

于 2011-10-06T09:03:28.833 回答
0

你能做的就是这个。

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

但这并非万无一失。

于 2011-10-06T09:04:05.313 回答
0

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

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

我是 xlcalculator 的项目所有者,所以我将在演示中使用该库。也就是说,其他库完全能够胜任这项特定任务。每个库都有不同的遗产,因此它们具有不同的优势并支持不同的 Excel 功能。

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

堆栈溢出.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
于 2020-12-02T07:54:51.580 回答