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 数字的主要内容,如果未能解决你的问题,请参考以下文章

将数据格式化为:四舍五入带两位小数点(12.33)

如何让excel饼图的百分比带两位小数

XSLT - 四舍五入到小数点后两位

如何在MATLAB中实现小数点后保留2位。急!!!!!!

尝试返回带两位小数和逗号的值

在 UILabel 中查看带两位小数的数字 [重复]