Усечение числа при форматировании в хранилище данных

#formatting #mule #dataweave

#форматирование #mule #хранилище данных

Вопрос:

Есть ли какой-либо более короткий способ усечения числа при его форматировании? Похоже, что поведение по умолчанию — округление. К настоящему времени у меня есть это:

 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"
}
  

Ответ №1:

Вы можете определить режим округления при преобразовании типа:

 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
}
  

Комментарии:

1. Я нашел поддерживаемый метод с использованием roundMode. Ответ обновлен.