代码之家  ›  专栏  ›  技术社区  ›  Nathan Fisher

IIF函数是计算SSR中的两条路径还是短路?

  •  19
  • Nathan Fisher  · 技术社区  · 15 年前

    我正试图根据产品的销售情况来评估每公斤的价格。如果产品在指定的时间段内被准确地销售,这将很好地工作。但是,如果产品未售出,则千克(分母)最终为0(零),并会产生错误结果。-除以零误差。

    我试过这个

    =iif(KgSold=0,0,Revenue/KgSold)
    

    似乎 iif 函数同时计算真假结果。我该怎么解决这个问题呢?

    我应该使用 switch 而是函数?

    =switch(KgSold=0,0
            KgSold<>0,Revenue/KgSold)
    
    3 回复  |  直到 9 年前
        1
  •  16
  •   Robert Harvey    15 年前

    你说得对,它不会短路。那太糟糕了。

    你必须这样做:

    = Iif(KgSold = 0, 0, Revenue) / Iif(KgSold = 0, 1, KgSold )
    

    开关功能也应该工作。

        2
  •  4
  •   Bryan Ward    15 年前

    这是因为在vbscript中,IIF中的所有条件都将在任何功能发生之前先进行评估。

        3
  •  0
  •   Ammusionist    9 年前

    在代码中添加以下内容:

    Public Function SafeDiv(byval num as double, byval den as double) as object
    
        If den = nothing then return nothing
        If den = 0 then return nothing
    
        return num / den
    
    End Function
    

    然后打电话

    =Code.SafeDiv(Revenue,KgSold) 
    

    在文本框中,继续

    推荐文章