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

Karate框架中如何将数值小数位数缩减至最多两位

实现方法

浮点数累加出现8.110000000000001是JavaScript浮点数运算的固有精度特性,直接对最终结果做格式化处理即可,两种常用实现如下:

  • 方案1:计算完成后用toFixed()做格式化(最简便)
    toFixed(2)会将数值四舍五入保留两位小数,注意该方法返回字符串类型,如果后续需要做数值运算,要转回Number类型:
def array = [2.16,1.34,1.32,1.25,0.65,0.48,0.42,0.26,0.14,0.06,0.03,0]
def result = 0
def fun = function(x){ var temp = karate.get('result'); karate.set('result', temp + x )}
karate.forEach(array, fun)
// 保留两位小数,转Number可自动省略末尾无意义的0
def result = Number(result.toFixed(2))
print result

运行后输出结果为8.11,符合预期。

  • 方案2:累加阶段转整数计算(从根源规避精度误差)
    如果要避免累加过程的精度偏移,可以把所有数值乘100转为整数做累加,计算完成后再除以100还原:
def array = [2.16,1.34,1.32,1.25,0.65,0.48,0.42,0.26,0.14,0.06,0.03,0]
def result = 0
def fun = function(x){ 
  var temp = karate.get('result');
  // 乘100取整后累加,规避浮点数计算误差
  karate.set('result', temp + Math.round(x * 100))
}
karate.forEach(array, fun)
// 计算完成后还原为两位小数
def result = result / 100
print result

如果仅需要打印展示时显示两位小数,不需要后续参与数值计算,直接在打印时调用print result.toFixed(2)即可,无需额外做类型转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:45:56