Winny 发表于 2023-11-2 14:49:05

超精度计算问题

需求背景:

   由于各种历史原因,实际的excel文件可能被其它三方工具写入过值,或者是xls转xlsx过程当中,会出现浮点型数据超过15位的问题。而在计算机存储时,浮点型数据小数位最长也只能表示到15位。这种具体问题产生的原因很难去追踪,因此这里不再过多的赘述。本文主要介绍当数字精度超出15位时,在SpreadJS中如果进行修正。

解决方式:
    首先需要定位单元格问题,这种问题大部分都是由于历史文件中单元格为数值,且单元格类型是常规而导致的。一般明确的设置了单元格为数值类型且保留了特定小数位不会出现这一问题。
    解决的方法为在引入资源后添加如下代码:
let paintFn = GC.Spread.Sheets.CellTypes.Text.prototype.paint;
GC.Spread.Sheets.CellTypes.Text.prototype.paint = function (ctx, value, x, y, w, h, style, context) {
    if (typeof value === 'number' && style.formatter === 'General') {
      value = +value.toPrecision(15)
    }
    paintFn.call(this, ctx, value, x, y, w, h, style, context);
}

页: [1]
查看完整版本: 超精度计算问题