文字列を double に解析しようとして問題が発生しています。これはサンプル コードになります。type :double の代わりに整数を返します。
{
"data": "22" as :number { format: "##.##" }
}
文字列を double に解析しようとして問題が発生しています。これはサンプル コードになります。type :double の代わりに整数を返します。
{
"data": "22" as :number { format: "##.##" }
}
これ、そしてこれだけが私にとってはうまくいきます。
%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を生成します。
私は使用しています:
%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"
}
文字列のフォーマットについてはそれ以上だと思います。小数点に対してこれを試してください:
{
"data": "22" as :number {format: ".00"}
}