You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mule4 DataWeave处理:将NewPrice字段保留两位小数

问题

Postman输出的Payload中,NewPrice字段始终带有末尾零(如135.3000、31.4500),需要将该字段设置为保留两位小数。

当前输出Payload:

[
{
"EndDate": "1900-01-01",
"NewPrice": 135.3000,
"StartDate": "2023-04-01",
"marketRank": 102,
"QtyDelivered": 0,
"QtyRemain": 0,
"QtyOnHand": 12
},
{
"EndDate": "1900-01-01",
"NewPrice": 31.4500,
"StartDate": "2023-08-01",
"marketRank": 111,
"QtyDelivered": 0,
"QtyRemain": 0,
"QtyOnHand": 4
}
]

目前已通过DataWeave将StartDate和EndDate从yyyy-mm-ddT00:00:00格式转换为yyyy-mm-dd,但不清楚如何处理NewPrice字段,现有DataWeave代码如下:

%dw 2.0
output application/json

---
payload map((item, index) -> item 
    update {case date at .StartDate  ->  date as Date}
    update {case date at .EndDate  ->  date as Date}
)

(注:原代码中payload[0]为错误写法,会仅处理第一个元素,已修正为直接使用payload)

解决方案

针对NewPrice字段的两位小数需求,提供两种DataWeave处理方式:

方式1:保留数字类型,四舍五入到两位小数

通过倍数运算结合round()函数,确保结果为数字类型且保留两位小数:

%dw 2.0
output application/json

---
payload map((item, index) -> item 
    update {case date at .StartDate -> date as Date}
    update {case date at .EndDate -> date as Date}
    update {case price at .NewPrice -> (price * 100) round / 100}
)

方式2:格式化为字符串类型的两位小数

如果需要输出固定两位小数的字符串格式(如"135.30"),使用formatNumber()函数:

%dw 2.0
output application/json

---
payload map((item, index) -> item 
    update {case date at .StartDate -> date as Date}
    update {case date at .EndDate -> date as Date}
    update {case price at .NewPrice -> formatNumber(price, "#.00")}
)

说明

  • 方式1输出的NewPrice为数字类型,会自动去掉末尾无意义的零(如135.3000变为135.3),同时对第三位小数进行四舍五入
  • 方式2输出的NewPrice为字符串类型,强制保留两位小数(如135.3变为"135.30")

内容的提问来源于stack exchange,提问作者ilya.fastiv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:12:28