Tag: 懒惰评估

AND()和OR()的Excel惰性评估

Excel似乎不使用AND()和OR()函数的懒惰评估。 例如: =AND(A1<>0, B1/A1>.5) 将会导致#DIV / 0!的值。 另一种select是使用if语句: =IF(A1<>0, B1/A1>.5, FALSE) 然而,如果AND函数计划在IF函数内部使用(或者可能是一些嵌套的IF),这会变得混乱。 有更好的(即更可读)的解决scheme吗?

在C#中计算值的数组(从Excel转换公式)

我目前正在build立一个半复杂的计算器,这个计算器基本上是从我提供的Excel电子表格转换而来的。 我已经掌握了大部分内容,但Excel电子表格中有一部分是在6行和7列之间进行多次计算的,但问题在于,计算并没有按照特定的顺序发生。 因此,例如,使用(Row2[Column4] * Row2[Column5])计算(Row4[Column2] / Row5[Column1])使用(Row4[Column2] / Row5[Column1])计算Row1[Column4]等等。 。 我曾经想过使用二维数组,但是恐怕这些数值会按照特定的顺序计算,因此当它们到达时没有任何价值。 据我所知, Row1将首先计算,然后Row2 , Row3等 所以,没有为我的Excel电子表格中的每个单元格创build一个variables(并相应地sorting),有没有一种方法可以使用C#来计算? 我真的很感激任何帮助,build议,指针,无论你认为可能 – 我很乐意听到它! 编辑实现由@dtb提供的Lazy类后,我有以下代码。 这是我提供的Excel电子表格内容的直接副本,包括指针和计算。 var sr = new Lazy<decimal>[6, 6]; sr[0, 0] = new Lazy<decimal>(() => sr[1, 0].Value – eNumber); sr[0, 3] = new Lazy<decimal>(() => sr[0, 4].Value – sr[1, 0].Value – sr[1, 4].Value); sr[0, 4] = new […]

Excel是否评估提供给IF函数的结果参数?

Excel的if函数有三个参数,一个条件,一个if-true值和一个if-false值。 Excel计算出所有三个参数的值,还是只计算出条件的值和相应的结果? 澄清:我不知道if将会是什么结果 ,我想知道在计算函数的结果之前是否计算所有参数的值。 这相当于询问if函数是否使用懒惰或严格的评估。 例如,下面的伪代码: x = 5; print x>2 ? "Bigger" : "Smaller" + 1/0 会用一个严格评估的语言来抛出一个被零除的例外,因为它会评估1/0 ,即使结果对于?:算子是不需要的。 在懒惰评估语言中,在决定要评估哪个expression式之前, ?:操作符将评估x>2 。 问题是,在Excel中, 1/0产生一个expression式中可以存在的合法值(恰好是#DIV/0! )。 因此,简单地调用=if(true,1,1/0)不会显示Excel是否正在评估1/0 。