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

