基于Camunda与SpringBoot解决DMN表格变量浮点精度及舍入问题
解决Camunda DMN浮点数精度匹配问题
针对你遇到的double/float精度导致DMN决策表匹配错误的问题,直接在DMN内部用以下几种方式处理:
用FEEL表达式实现一位小数舍入
Camunda的DMN支持FEEL表达式,你可以在输入列的「表达式」字段里直接对变量做舍入处理,而非直接引用原始变量。比如对double类型的b,写FEEL表达式:round(b * 10) / 10这个表达式会把
0.600000000001这类值转换成0.6,刚好符合你要的#.#格式。配置时把输入列的变量名改成比如roundedB,然后在规则的匹配条件里用roundedB去匹配0.6的区间即可。排查之前舍入无效的原因
你之前尝试舍入没生效,大概率是用了Java语法而非FEEL语法,或者把表达式放错了位置。FEEL的round函数是直接调用的,不需要加Math.前缀;而且必须把舍入表达式写在输入列的「表达式」栏,不是写在规则的匹配条件里。退而求其次:用容错区间匹配
如果不想做舍入,也可以把区间范围放宽,比如把匹配0.6的条件改成[0.599, 0.601),覆盖浮点数的精度误差。但这种方式不如舍入通用,后续维护起来也麻烦,优先推荐第一种方法。
内容的提问来源于stack exchange,提问作者Floor is Java
相关产品推荐
相关产品推荐

