我正在尝试使用带有条件运算符的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在输入源中具有空值,因此该作业在空指针异常上失败。因此试图处理它。
再次感谢。
答案 0 :(得分:0)
中存在语法错误
(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))
答案 1 :(得分:0)
语法错误只是最后一行的一个额外括号,错误值 100.0f ,同时乘以double值,而 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 的任何Month值,源中的值为null,则作业将因空指针异常错误而失败。对于您的语法,现在使用上面的语法不会出现任何错误,只是为了确保您使用的是双数据类型。
为了更好的练习,在使用tmap时总是使用非null条件。