2

文字列を double に解析しようとして問題が発生しています。これはサンプル コードになります。type :double の代わりに整数を返します。

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

3 に答える 3

2

これ、そしてこれだけが私にとってはうまくいきます。

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

formatは、数値から文字列に変換するときにゼロを追加するだけのようです。"22" がすでに数値である場合、最初の :number 変換は必要ありません。

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

後者の数値変換により、float として出力されます。そうしないと、ホストのロケールに従ってフォーマットされた文字列が返されます。

そして用心してください。代わりに使用%output text/jsonすると、上記のコードは場合によっては22.00ではなく22.0を生成します。

于 2015-11-19T14:16:59.757 に答える
0

私は使用しています:

%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"
}
于 2016-12-13T19:18:14.207 に答える
0

文字列のフォーマットについてはそれ以上だと思います。小数点に対してこれを試してください:

{

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

}
于 2015-10-22T13:08:29.100 に答える