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

