Dataweave 始终输出带两位小数的 JSON 数字
Posted
技术标签:
【中文标题】Dataweave 始终输出带两位小数的 JSON 数字【英文标题】:Dataweave Always output JSON number with two decimal places 【发布时间】:2017-11-11 02:26:20 【问题描述】:我通过 Dataweave 中的 xml 获得了以下号码。
<b:AmountValue>180.90</b:AmountValue>
使用 Dataweave,我试图输出一个对应的带有两位小数的 json 数字(代表货币)。
这是我的 Dataweave 表达式的样子...
amount: $.AmountValue as :number as :string format: ".00" as :number
输出 json 正在丢失尾随零。
i.e. "amount":180.9
如何将我的 Dataweave 表达式更改为始终保留两位小数?
或者是我对 json 数字类型的理解有误?
谢谢
【问题讨论】:
【参考方案1】:如果你可以忍受数量是一个字符串,那么远程最后一个as :number
amount: $.AmountValue as :number as :string format: ".00"
【讨论】:
没有。对不起我不行。不能是字符串 那么你必须忍受缺失的零。从小数表示中删除尾随零是一种习惯行为,是否这样做不是由小数的提供者(就是你)做出的决定【参考方案2】:如果你只输入amount: $.AmountValue as :number
会发生什么
我在 anypoint studio 的预览版中尝试了这个,没有看到丢失尾随的 0。而且我使用的是最新版本。
【讨论】:
如果将字符串转换为数字,则不再控制值的表示。它最终可能会以尾随零显示...或不显示【参考方案3】:我也对此进行了测试,并且可以正常工作。
如果你试试这个:
8.2 as :string format: "0.00" as :number
然后添加额外的小数位。
如果您输出到 application/json 或 application/XML,您将看到打印出两位小数 8.20
。如果您输出到 application/java,那么它是一个双精度数,您必须决定如何打印出双精度数。
如果您尝试8.2 as :number
,则会打印为8.2
。
【讨论】:
【参考方案4】:如前所述,从 :string 到 :number 的强制是删除尾随 0 的原因。Dataweave 支持使用 octothorp 规定的 :number 格式。
以下代码片段将产生您所需的两位小数。
amount: $.AmountValue as :number format: "#.##"
【讨论】:
您好 zachcdr,请解释您的答案是做什么的,以便作者了解它的工作原理和原因。有关详细信息,请参阅"How do I write a good answer?"。以上是关于Dataweave 始终输出带两位小数的 JSON 数字的主要内容,如果未能解决你的问题,请参考以下文章