Nullif-在Coldfusion中使用

Nullif-在Coldfusion中使用,coldfusion,nullif,Coldfusion,Nullif,正在寻找有关此代码的一些帮助。在不发布整个文件的情况下,我只需要在Coldfusion中使用Nullif的一些帮助 我可以在我的SQL语句中使用它,但为了学习,我想知道在设置变量时是否可以使用它,如下所示:- 代码没有抛出任何错误,但我想知道将0放在Nullif后面的什么位置 <cfif AE_C NEQ 0> <cfset AE_P=AE_T/AE_C> <cfset AE_A=AE/AE_C*100> <cfset AE_B

正在寻找有关此代码的一些帮助。在不发布整个文件的情况下,我只需要在Coldfusion中使用Nullif的一些帮助

我可以在我的SQL语句中使用它,但为了学习,我想知道在设置变量时是否可以使用它,如下所示:-

代码没有抛出任何错误,但我想知道将0放在Nullif后面的什么位置

<cfif AE_C NEQ 0>
    <cfset AE_P=AE_T/AE_C>
    <cfset AE_A=AE/AE_C*100>
    <cfset AE_B = AE-AE_C/H8*H9>
    <cfset AE_D=AE/H9*H8> 
<cfelse>
    <cfset AE_P=ISNULL(AE_T/NULLIF(AE_C))>
    <cfset AE_A=ISNULL(AE/NULLIF(AE_C*100))>
    <cfset AE_B=ISNULL(AE-AE_C/NULLIF(H8*H9))>
    <cfset AE_D=ISNULL(AE/NULLIF(H9*H8))>
</cfif>


希望可以这样做。

重要:您的代码没有显示任何错误,因为
ISNULL
正在掩盖错误


如果不是有效的ColdFusion函数,则
null也是无效的。我相信页面中没有错误的原因,因为ColdFusion函数似乎是一个非常通用的函数,并且显示了一些未记录的特性。即使其中的表达式已定义,也不会返回错误,如果表达式在语法上有效,也不会返回错误

例如

作为替代方案,您可以执行以下操作

下面的代码有点粗糙,但您可以检查该函数。对于不是数字的任何字符串,它都将返回0(有关更多详细信息,请查看文档)

NULLIF(AE_C)
变为
val(AE_C)



如果
val()
返回
0
,那么
ISNULL()
的输出将是
YES
,因为除以
0
会抛出错误。

重要的:您的代码没有显示任何错误,因为
ISNULL
正在掩盖错误


如果
不是有效的ColdFusion函数,则
null也是无效的。我相信页面中没有错误的原因,因为ColdFusion函数似乎是一个非常通用的函数,并且显示了一些未记录的特性。即使其中的表达式已定义,也不会返回错误,如果表达式在语法上有效,也不会返回错误

例如

作为替代方案,您可以执行以下操作

下面的代码有点粗糙,但您可以检查该函数。对于不是数字的任何字符串,它都将返回0(有关更多详细信息,请查看文档)

NULLIF(AE_C)
变为
val(AE_C)



如果
val()
返回
0
,那么
ISNULL()
的输出将是
YES
,因为除以
0
会出错。

这更多的是一个注释而不是答案。请参阅RRK关于
NULLIF
不是有效的ColdFusion函数和
ISNULL()
隐藏错误的回答

我的评论更多的是关于你们运作的逻辑。您不需要执行

原件:

<cfif AE_C NEQ 0>
    <cfset AE_P=AE_T/AE_C>
    <cfset AE_A=AE/AE_C*100>
    <cfset AE_B = AE-AE_C/H8*H9>
    <cfset AE_D=AE/H9*H8> 
<cfelse>
    <cfset AE_P=ISNULL(AE_T/NULLIF(AE_C))>
    <cfset AE_A=ISNULL(AE/NULLIF(AE_C*100))>
    <cfset AE_B=ISNULL(AE-AE_C/NULLIF(H8*H9))>
    <cfset AE_D=ISNULL(AE/NULLIF(H9*H8))>
</cfif>
我不知道您的代码的流程,因此我不知道
H8
H9
如何受到
aeu C
的影响,因此您可能还需要检查
0


但是,我仍然会回到我通常的想法,如果这些计算是在SQL中使用的,而不是真正在代码中使用的,那么它们应该在SQL中完成,而不是传递给应用服务器,然后再返回SQL。不过,我也不知道您的代码在做什么,所以在代码中使用这些计算器可能更合适

这与其说是回答,不如说是评论。请参阅RRK关于
NULLIF
不是有效的ColdFusion函数和
ISNULL()
隐藏错误的回答

我的评论更多的是关于你们运作的逻辑。您不需要执行

原件:

<cfif AE_C NEQ 0>
    <cfset AE_P=AE_T/AE_C>
    <cfset AE_A=AE/AE_C*100>
    <cfset AE_B = AE-AE_C/H8*H9>
    <cfset AE_D=AE/H9*H8> 
<cfelse>
    <cfset AE_P=ISNULL(AE_T/NULLIF(AE_C))>
    <cfset AE_A=ISNULL(AE/NULLIF(AE_C*100))>
    <cfset AE_B=ISNULL(AE-AE_C/NULLIF(H8*H9))>
    <cfset AE_D=ISNULL(AE/NULLIF(H9*H8))>
</cfif>
我不知道您的代码的流程,因此我不知道
H8
H9
如何受到
aeu C
的影响,因此您可能还需要检查
0


但是,我仍然会回到我通常的想法,如果这些计算是在SQL中使用的,而不是真正在代码中使用的,那么它们应该在SQL中完成,而不是传递给应用服务器,然后再返回SQL。不过,我也不知道您的代码在做什么,所以在代码中使用这些计算器可能更合适

这是Ben Nadel写的一些代码,我发现这些代码可以解决这个错误,也许有人可以帮助我如何实现它,因为我就是想不起来

<!---
Do SQL division with divide-by-zero protection. But this,
time, let's provide a default value if the division is
not valid.
--->
<cfquery name="qDivision" datasource="#REQUEST.DSN.Source#">
SELECT
    (
        ISNULL(
            (45 / NULLIF( 0, 0 )),
            0
        )
    ) AS value
  ;
</cfquery>

<!--- Output resulting value. --->
[ #qDivision.value# ]

挑选
(
ISNULL(
(45/NULLIF(0,0)),
0
)
)作为价值
;
[#qDivision.value]

这是Ben Nadel写的一些代码,我发现这些代码可以解决这个错误,也许有人可以帮助我如何实现它,因为我只是无法理解它

<!---
Do SQL division with divide-by-zero protection. But this,
time, let's provide a default value if the division is
not valid.
--->
<cfquery name="qDivision" datasource="#REQUEST.DSN.Source#">
SELECT
    (
        ISNULL(
            (45 / NULLIF( 0, 0 )),
            0
        )
    ) AS value
  ;
</cfquery>

<!--- Output resulting value. --->
[ #qDivision.value# ]

挑选
(
ISNULL(
(45/NULLIF(0,0)),
0
)
)作为价值
;
[#qDivision.value]

如果将
0
设置为
null
,您将得到一个错误,因为除以0将是一个错误。如果您可以提供所需输出的概要,那将非常好。上面的代码只是20多个代码中的一组。我们需要计算显示0.00,当我们将0除以4时,没有抛出异常。目前,我收到的计算结果是,显然被计算为1的每个值都是1。我发现了Ben Nadel编写的一段关于处理Nullif()的代码,当在SQL语句中使用它时,它会正确设置所有值,这样您就不会收到错误。我就是想不出如何实现它。我会把它贴在下面。也许这就是答案?
0/1
是有效的数学。
42/null也是如此。当您尝试将底部的数字设为0(
1/0
)时,将抛出错误。我认为您遇到的问题是隐式类型转换
9/2
将返回
5
,但
9.0/2
将返回
4.5
。您必须将每个操作中的第一个数字设置为十进制,以使其余数字也强制设置为十进制
<!---
Do SQL division with divide-by-zero protection. But this,
time, let's provide a default value if the division is
not valid.
--->
<cfquery name="qDivision" datasource="#REQUEST.DSN.Source#">
SELECT
    (
        ISNULL(
            (45 / NULLIF( 0, 0 )),
            0
        )
    ) AS value
  ;
</cfquery>

<!--- Output resulting value. --->
[ #qDivision.value# ]