我们在Open Studio中有一个Talend作业,表达式中包含以下公式:
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
所以,希望有人在这里可以指出我在解码论坛时做错了什么?
TIA
答案 0 :(得分:0)
想出来。错过了成本和价格分别乘以0.6和0.4的事实。完全不同。 现在,为什么它以这种方式编码,任何人都可以猜测 - 这里没有业务逻辑。
是否有Java BigDecimal /转换逻辑?