在 DataWeave 中格式化时截断数字

Truncate number while formatting in DataWeave

有没有更短的方法可以在格式化时截断数字?看起来默认行为是舍入。现在我有这个:

var val = 123.129
---
{
    def: val as String {format: "0.00"},
    truncate: 
        (if(val > 0) (floor(val * 100)/100)
        else (ceil(val * 100)/100)
        ) as String {format: "0.00"}
}

输出为

{
  "def": "123.13",
  "truncate": "123.12"
}

可以在类型转换中定义round模式:

down: 123.129 as String {format: "0.00", roundMode:"DOWN" }

模式基于 https://docs.oracle.com/javase/8/docs/api/java/math/RoundingMode.html 的名称。

另一种选择是做你所做的,但将其封装到一个可重用的函数中:

fun truncate(n,p) = do {
    var power = 10 pow p
    ---
    if (n>0) floor(n * power)/power
    else ceil(n * power)/power
}