对 If..Else 使用条件运算符
Using Conditional Operator for If..Else
我正在尝试使用带有条件运算符的 IF..ELSE 逻辑修改 Talend Open Studio 中的现有表达式。
逻辑是:
IF (row73.Month01 == NULL || row73.Month01 == 0.0) THEN 1
ELSE
{
IF (row46.month01 == NULL || row46.Month01 == 0.0) THEN 1
ELSE (row46.Month01*100.0f/row73.Month01)
}
我输入的带条件运算符的表达式是:
(row73.Month01==null||row73.Month01==0.0)?1: (row46.Month01==null||row46.Month01==0.0)?1: (row46.Month01*100.0f/row73.Month01))
但是,在 Talend 中测试表达式时,它显示 "Unresolved compilaton"。我试图在独立的 java 骨架文件中测试上述内容,但后来我得到 "source_file.java:13: error: on "?"
我在上面的 Talend 表达式格式中做错了什么?
非常感谢任何意见。
TIA,
蜜蜂
又意识到一件事。 Month01 的数据类型在工作流中定义为 Float。鉴于此,Null 检查是否有效?因为这是原始数据类型而不是对象。不应该只检查 row73.Month01 == 0.0 就足够了吗?
目前,由于 Month01 在输入源中有空值,因此此作业因空指针异常而失败。因此试图处理它。
再次感谢。
中存在语法错误
(row73.Month01==null||row73.Month01==0.0)?1:
(row46.Month01==null||row46.Month01==0.0)?1:
(row46.Month01*100.0f/row73.Month01))
第二行需要一个左括号:
(row73.Month01==null||row73.Month01==0.0)?1:
((row46.Month01==null||row46.Month01==0.0)?1:
(row46.Month01*100.0f/row73.Month01))
语法错误只是最后一行中的一个额外的括号和错误的值 100.0f 同时乘以双精度值和 1 而不是1.0
正确的语法如下:
(row73.Month01==null||row73.Month01==0.0)?1.0:
(row46.Month01==null||row46.Month01==0.0)?1.0:
(row46.Month01*100.0/row73.Month01)
但是,当您未使用 == null 的任何月份值的源中存在空值时,作业将失败并出现空指针异常错误。对于您的语法,现在使用上述语法不会出现任何错误,只是为了确保您使用的是双精度数据类型。
为了更好的练习,在使用 tmap 时始终使用非空条件。
我正在尝试使用带有条件运算符的 IF..ELSE 逻辑修改 Talend Open Studio 中的现有表达式。
逻辑是:
IF (row73.Month01 == NULL || row73.Month01 == 0.0) THEN 1
ELSE
{
IF (row46.month01 == NULL || row46.Month01 == 0.0) THEN 1
ELSE (row46.Month01*100.0f/row73.Month01)
}
我输入的带条件运算符的表达式是:
(row73.Month01==null||row73.Month01==0.0)?1: (row46.Month01==null||row46.Month01==0.0)?1: (row46.Month01*100.0f/row73.Month01))
但是,在 Talend 中测试表达式时,它显示 "Unresolved compilaton"。我试图在独立的 java 骨架文件中测试上述内容,但后来我得到 "source_file.java:13: error: on "?"
我在上面的 Talend 表达式格式中做错了什么?
非常感谢任何意见。
TIA, 蜜蜂
又意识到一件事。 Month01 的数据类型在工作流中定义为 Float。鉴于此,Null 检查是否有效?因为这是原始数据类型而不是对象。不应该只检查 row73.Month01 == 0.0 就足够了吗?
目前,由于 Month01 在输入源中有空值,因此此作业因空指针异常而失败。因此试图处理它。
再次感谢。
(row73.Month01==null||row73.Month01==0.0)?1:
(row46.Month01==null||row46.Month01==0.0)?1:
(row46.Month01*100.0f/row73.Month01))
第二行需要一个左括号:
(row73.Month01==null||row73.Month01==0.0)?1:
((row46.Month01==null||row46.Month01==0.0)?1:
(row46.Month01*100.0f/row73.Month01))
语法错误只是最后一行中的一个额外的括号和错误的值 100.0f 同时乘以双精度值和 1 而不是1.0
正确的语法如下:
(row73.Month01==null||row73.Month01==0.0)?1.0:
(row46.Month01==null||row46.Month01==0.0)?1.0:
(row46.Month01*100.0/row73.Month01)
但是,当您未使用 == null 的任何月份值的源中存在空值时,作业将失败并出现空指针异常错误。对于您的语法,现在使用上述语法不会出现任何错误,只是为了确保您使用的是双精度数据类型。
为了更好的练习,在使用 tmap 时始终使用非空条件。