You need to enable JavaScript to run this app. Karate API请求中如何将数值保留2位小数且不丢失末尾零
优惠活动
大模型
产品
解决方案
定价
更多

Karate API请求中如何将数值保留2位小数且不丢失末尾零

Karate API 数值保留2位小数(无引号、不丢失末尾零)解决方案

问题根因

  • JavaScript 原生数值类型不会存储末尾无意义的小数位,parseFloat(29) 会自动转为 29 而非 29.00
  • toFixed(2) 方法返回的是字符串类型,Karate 序列化JSON时会自动为字符串添加双引号,不符合接口仅接受数值类型的要求

最优解决方案

利用 Karate 底层基于Java运行的特性,使用BigDecimal类型存储数值,可明确指定保留的小数位数,序列化时会自动输出为不带引号的数值格式:

def reqJson = read('Json/PaynowPayload.json')
def amount = SearchResults.ratePlans[0].rooms[0].totalCost.amount
// 写法1:使用Karate内置方法简化(推荐,Karate 1.0+ 支持)
def Newamount = karate.decimal(amount).setScale(2, java.math.RoundingMode.HALF_UP)
// 写法2:全Java类写法,兼容旧版本Karate
// def Newamount = new java.math.BigDecimal(amount.toString()).setScale(2, java.math.RoundingMode.HALF_UP)
set reqJson.payment.amount.minorUnits = Newamount

参数说明

  • setScale(2) 代表保留2位小数
  • RoundingMode.HALF_UP 为常规四舍五入规则,若需直接截断小数可替换为RoundingMode.DOWN

验证方法

执行代码后添加print reqJson,可看到输出的payment.amount.minorUnits字段为29.00格式,无外层双引号,符合接口要求。

内容的提问来源于stack exchange,提问作者Paul M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 23:39:03