spreadjs 简单两数相减 公式计算错误 多个好多小数位
直接输入 =235.5-235.7 就这样了 ,虽然右键设置单元格数字能解决 但是引用还是0.199999,导致我们现在自定义函数计算错误 非常紧急
本地excel不这样
期望结果-0.2 收到,这个看起来是存在浮点计算误差,暂时的解决方案,可以用round公式把结果包起来
问题我会报给研发调研,帖子保留处理 问题的原因是 javascript 原生计算精度问题。不管我们如何调整我们的calc engine精度逻辑,最终还是要基于原生的计算操作。
作为解决方法,这里是一个建议,需要覆盖Number原生的toPrecision函数,请参考下面的代码并决定是否在项目中使用。
var nativeToPrecisionFn = Number.prototype.toPrecision;
Number.prototype.toPrecision = function () {
var value = this.valueOf();
if (true) {
var valuestr = nativeToPrecisionFn.apply(this, arguments);
var decimalPart = valuestr.split('.'), integerPart = valuestr.split('.');
var zeroMatchCount=0,nineMatchCount=0;
var zeroMatchCount = decimalPart.match(/(0+)$/)?decimalPart.match(/(0+)$/).length:0;
var nineMatchCount = decimalPart.match(/(9+)$/)?decimalPart.match(/(9+)$/).length:0;
if (decimalPart && (zeroMatchCount > 7 || nineMatchCount > 7)) {
var scale=Math.pow(10,(decimalPart.length-Math.max(zeroMatchCount,nineMatchCount)));
console.log(decimalPart.length,Math.max(zeroMatchCount,nineMatchCount),scale);
decimalPart.length-Math.max(zeroMatchCount,nineMatchCount)
return Math.round(value*scale)/scale + "";
}
return valuestr;
}
return nativeToPrecisionFn.apply(this, arguments);
}
页:
[1]