在 WSO2 CEP 3.0.0 中。我在双重类型的属性中遇到了一些令人困惑的行为。
假设以下 siddhi 脚本:
define stream LongStream LongAttr1 long, LongAttr2 long;
define stream DoubleStream DoubleAttr1 double;
from LongStream
select (LongAttr1/LongAttr2) as DoubleAttr1
insert into DoubleStream;
from DoubleStream[DoubleAttr1 > 0.75]
...
在这个脚本中,在 DoubleStream 中插入 DoubleAttr1 是有效的,可以很好地给出一个带小数的浮点值。但是之后的过滤器引发了一个强制转换异常。
ERROR - {QuerySelector} Input event attribute type java.lang.Double cannot be cast to java.lang.Long type defined in the stream definition!
java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Long at org.wso2.siddhi.core.executor.conditon.compare.greater_than_equal.GreaterThanEqualCompareConditionExecutorLongDouble.process(GreaterThanEqualCompareConditionExecutorLongDouble.java:34)
这很令人困惑,似乎 DoubleAttr1 被认为是长的?
如果我将 DoubleAttr1 计算为:
convert(LongAttr1/LongAttr2, double)
or
(LongAttr1 * 100.0) / (LongAttr2 * 100.0)
不再引发异常。我发现这种行为非常令人困惑,我认为应该在以后的版本中防止或纠正它。你有什么意见?
溴,
埃里克
PS:我也遇到了转换函数的一些舍入错误:如果 LongAttr1 = 2 和 LongAttr2 = 2,转换 (LogAttr1 / LongAttr2 *100) 给出 99.0 作为结果