我知道math.ceil和numpy.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 的解决方案?
我不知道有任何 python 函数可以这样做,但您可以轻松编写一个代码:
import math
def ceil(x, s):
return s * math.ceil(float(x)/s)
如果两个参数都是整数,则在 python 2 中必须转换为浮点数以避免整数除法。您也可以使用from __future__ import division
. 这对于 python 3 是不需要的。
你能做的就是这个。
ceil = lambda x,y: math.ceil(x*(1.0/y))/(1.0/y)
但这并非万无一失。
有许多库在 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