2016-02-04 23 views
1

我們在開放工作室與下面的公式中的表達了Talend工作:解碼了Talend表達成Java公式

row1.Avg_Cost==null?null: 
(
    (
    (row1.IND_Price==null||row1.Avg_Price==null)? 
    row1.Avg_Cost:(
        row1.Avg_Cost.multiply(
               (row1.Avg_Cost.multiply(new BigDecimal(0.6))).add(row1.IND_Price.multiply(new BigDecimal(0.4))) 
               ).divide(row1.Avg_Price, java.math.RoundingMode.HALF_UP) 
        ) 
).subtract(row1.IND_Spending==null?(new BigDecimal(0.0)):row1.IND_Spending) 
)   

我解碼這個公式,並通過一個簡單的Java程序運行到:

Avg_Revenue = AVG_COST *((AVG_COST + IND_PRICE)/ AVG_PRICE)

當我插上以下值,:

double AVG_COST = 26363.05462; 
    double AVG_PRICE = 26269.28416; 
    double IND_SPENDING = 3101; 
    double IND_PRICE = 26083; 

Talend給我:23243.73808作爲收入。 解碼的java程序給我:26550.2653

所以,希望有人能指出我在解碼forumla時做錯了什麼?

TIA

回答

0

想通了。錯過了成本和價格分別乘以0.6和0.4的事實。使所有的差異。 現在,爲什麼這樣編碼,是任何人的猜測 - 這裏沒有業務邏輯。

是否存在Java BigDecimal /轉換邏輯?