我知道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的解决方案?
答案 0 :(得分:10)
我不知道有任何python函数可以执行此操作,但您可以轻松编写一个代码:
import math
def ceil(x, s):
return s * math.ceil(float(x)/s)
如果两个参数都是整数,则在python 2中需要转换为float以避免整数除法。您也可以使用from __future__ import division
。 python 3不需要这样做。
答案 1 :(得分:0)
你能做的就是这个。
ceil = lambda x,y: math.ceil(x*(1.0/y))/(1.0/y)
但这并非万无一失。
答案 2 :(得分:0)
有许多库已经在Python中实现了许多Excel公式。
诸如PyCel,Formulas,xlcalculator和Koala之类的库使用AST将Excel公式转换为Python,因此通常具有现成的Python函数实现,以实现不同程度的“ Excel如何计算事物”(与之相反)。在其他地方完成)。至少对于如何实现这些功能或可能使用已经定义了功能的功能有一些想法。
我是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