对 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 时始终使用非空条件。