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
相关产品推荐
相关产品推荐

