【问题标题】:Dataweave Always output JSON number with two decimal placesDataweave 始终输出带两位小数的 JSON 数字
【发布时间】: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 数字类型的理解有误?

谢谢

【问题讨论】:

    标签: json mule dataweave


    【解决方案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?"
      猜你喜欢
      • 2019-08-09
      • 1970-01-01
      • 2014-05-03
      • 2016-03-01
      • 2022-12-07
      • 2013-01-29
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多