Camunda 7.17:如何在字面表达式及DMN中实现6位向下取整?
Camunda 7.17 DMN 整数取整到6位的解决方法
问题根源
Camunda 7.17的DMN默认使用JUEL表达式,JUEL本身不支持带精度参数的rounddown、ceiling、floor方法;且long类型为整数,直接调用这类方法会因类型或函数支持问题失效。
实用解决方案
1. 整数运算直接实现取整
针对long类型,通过整数除法和乘法手动实现取整逻辑,无类型转换问题:
- 向下取整到6位(保留十万位):
(exp / 1000000) * 1000000 - 向上取整到6位:
((exp + 999999) / 1000000) * 1000000
替换exp为你的字面表达式结果即可。
2. 借助BigDecimal实现精准取整
将long转为BigDecimal,利用其内置的取整规则实现需求:
- 向下取整:
new java.math.BigDecimal(exp).setScale(-6, java.math.RoundingMode.DOWN).longValue() - 向上取整:
new java.math.BigDecimal(exp).setScale(-6, java.math.RoundingMode.CEILING).longValue()
可根据需要替换RoundingMode的枚举值,比如HALF_UP对应四舍五入。
3. 检查表达式配置细节
- 确认表达式无语法错误,JUEL不支持
rounddown这类自定义风格的函数,必须用上述合法写法 - 若存在类型歧义,显式将表达式结果转为long:
(long) exp
内容的提问来源于stack exchange,提问作者Rahul Nehete
相关产品推荐
相关产品推荐

