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

RestAssured中jsonPathEvaluator读取double类型数值出现误差问题求助

RestAssured数值读取精度异常解决方案

问题根因

首先排查路径笔误:你代码中使用的JsonPath为nextTier.maxThreshold,但实际响应体中对应的字段为nextTier.endThreshold,请先确认是否为代码笔误导致的取值错误。
排除路径问题后,该异常的核心原因是浮点数精度丢失:
RestAssured的JsonPath默认会将JSON中的小数值解析为双精度浮点数(double),十进制的149999.99无法被二进制浮点数精确表示,解析时会生成近似值,最终就出现了原值149999.99读取后变为149999.98的偏差,这是二进制浮点数本身的存储特性,不属于框架bug。

修复方案

方案1:全局配置JsonPath用BigDecimal解析小数

统一配置JsonPath的数值返回类型,避免所有小数解析的精度问题:

// 全局配置,建议在测试类初始化时执行一次即可
JsonPath.config = new JsonPathConfig().numberReturnType(JsonPathConfig.NumberReturnType.BIG_DECIMAL);
// 取值
BigDecimal endThreshold = response.jsonPath().get("nextTier.endThreshold");

方案2:单次指定返回类型为BigDecimal

如果不需要全局配置,可以在单次取值时指定目标类型:

BigDecimal endThreshold = response.jsonPath().getObject("nextTier.endThreshold", BigDecimal.class);

方案3:业务侧约定数值用字符串返回

如果是内部业务接口,可以和服务端约定金额、阈值这类对精度要求极高的字段用字符串类型返回,从根源上避免所有客户端的浮点数解析误差。


内容的提问来源于stack exchange,提问作者Dipu Krishnan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:15:02