Формат Mule Dataweave: число

У меня возникла проблема при попытке проанализировать строку, чтобы удвоить это, это был бы образец кода, он возвращает целое число вместо типа: удвоить любые идеи?

{
    "data": "22" as :number { format: "##.##" }
}

person Carlos    schedule 22.10.2015    source источник


Ответы (3)


Это и только это работает для меня;

%dw 1.0
%output application/json
---
{
    data: "22" as :number as :string {format: ".00"} as :number
}

Кажется, что формат добавляет нули только при преобразовании числа в строку. Если бы «22» уже было числом, вам не нужно было бы первое: преобразование числа;

data: 22 as :string {format: ".00"} as :number

Последнее преобразование числа делает его выводом с плавающей запятой. В противном случае вы получите строку, отформатированную в соответствии с локалью хоста.

И будьте осторожны. При использовании вместо этого%output text/json приведенный выше код в некоторых случаях дает 22.0 вместо 22.00.

person Ferdy Pruis    schedule 19.11.2015

Я думаю, что это больше для форматирования строк. Попробуйте это для десятичных знаков:

{

    "data": "22" as :number {format: ".00"}

}
person Ryan Carter    schedule 22.10.2015
comment
Это работает для всех типов вывода application / json и т. Д. Только не application / java. Я догадываюсь, что вы используете? - person Ryan Carter; 22.10.2015

Я использую:

%output application/json
%type currency = :string { format: "###,##0.00"} 
%function toLocalCurrency (currency) currency replace "." with "#" replace "," with "." replace "#" with ","
---
{
    usCurrencyWithOneDecimal: 900000.1 as :currency,
    brCurrency: toLocalCurrency(900000.1 as :currency),
    usCurrencyWithTwoDecimal: 900000.12 as :currency,
    usCurrencyWithThreeDecimal: 900000.124 as :currency,
    usCurrencyWithThreeDecimalRounding: 900000.125 as :currency,
    usCurrencyZero: 0 as :currency
}

Результат:

{
  "usCurrencyWithOneDecimal": "900,000.10",
  "brCurrency": "900.000,10",
  "usCurrencyWithTwoDecimal": "900,000.12",
  "usCurrencyWithThreeDecimal": "900,000.12",
  "usCurrencyWithThreeDecimalRounding": "900,000.12",
  "usCurrencyZero": "0.00"
}
person Vanessa Schissato    schedule 13.12.2016