行云数据 发表于 2024-4-15 16:33:50

SpreadJS显示和Excel不一致

本帖最后由 Richard.Huang 于 2024-5-24 10:19 编辑

产品:SpreadJS、GcExcel
版本:SpreadJS V17.0.5、GcExcel V7.0.5
调研编号:SJS-23991、DOCXLS-10195(已经调研结束)、SJS-23826(已经调研结束)
LastReview:2024/05/24
该问题已经被SpreadJS修复,开启GC.Spread.CalcEngine.ExcelCompatibleCalcMode = true后重新计算可以解决问题

通过GC加载Excel文件,再页面通过SpreadJS打开,显示结果和Excel软件打开效果不一致;

Excel打开

spreadJs显示效果:

详见调研Demo见附件

Richard.Huang 发表于 2024-4-15 16:50:58

本帖最后由 Richard.Huang 于 2024-4-15 16:57 编辑

您好,您在帖子中所描述的现象我在本地进行了重现,至于该现象的原因我们还需要进行进一步的调研定位。后续有相关调研进展我会第一时间在本贴中进行跟进。调研编号:SJS-23826

Richard.Huang 发表于 2024-4-18 10:30:03

您好这个问题我们调研了一下,发现是Excel的精度性缺陷,我们SpreaJS计算并没有错误,在Excel中G8-F8不等于0,因此Excel中这里计算结果为不通过

这个问题本质是引申到IEEE754的双精度浮点数的运算精度问题(https://en.wikipedia.org/wiki/IEEE_754)
因为这个标准的设定,天生的,在不同系统下浮点数运算必然会产生浮点误差。
然后各个产品在内部进行精度处理了,而Excel在这里的处理因为某种考虑没做这个处理,我们不得而知,这里Excel计算结果就是错误了。

如果您期望两者一致,可以参考Excel官方给出的一些解决方案:https://learn.microsoft.com/zh-cn/office/troubleshoot/excel/floating-point-arithmetic-inaccurate-result

行云数据 发表于 2024-4-18 10:41:47

期望:SpreadJS、GcExcel以及Excel三者都是一样的值。如果你们认为Excel计算错误,那么能否保证SpreadJS、GcExcel显示结果一致那?目前通过GC取值,显示的和Excel是一致的:不通过。

Richard.Huang 发表于 2024-4-18 16:34:46

本帖最后由 Richard.Huang 于 2024-4-18 16:43 编辑

行云数据 发表于 2024-4-18 10:41
期望:SpreadJS、GcExcel以及Excel三者都是一样的值。如果你们认为Excel计算错误,那么能否保证SpreadJS、G ...
了解了,我们将会针对GcExcel计算问题进行再进一步调研,后续有相关调研进展我会第一时间在本贴中进行跟进;调研编号:DOCXLS-10195

Richard.Huang 发表于 2024-4-22 14:10:35

本帖最后由 Richard.Huang 于 2024-4-22 14:12 编辑

最新调研进展:目前本贴中遇到的问题已经被定位,后续我们将会在未来V7.1.1版本的迭代中进行优化处理。之后有相关修复进展我会第一时间在本贴中进行跟进。感谢您提供的线索反馈,将为您发200金币作为奖励。

Richard.Huang 发表于 2024-5-8 09:43:52

最新调研进展:本贴中提及的问题原因在上面做了描述,经过讨论,我们的GcExcel决定维持当前的行为不变,因为偏离Excel的结果将违背GcExcel与Excel强兼容的基本原则,因此未来我们将在SpreadJS前端侧来兼容这一块,让SpreadJS、Excel、GcExcel三者计算结果一致。新的调研编号:SJS-23991

行云数据 发表于 2024-5-11 14:22:01

GC更新到7.1.0+SpreadJs更新到17.0.5,上述问题任然存在。(GC取值和spreadjs显示不一致)

Ellia.Duan 发表于 2024-5-11 18:07:08

您好,上文也提到了,我们计划在SpreadJS侧来兼容这一块。

关于此问题计划在17.0.9版本进行兼容。

Richard.Huang 发表于 2024-5-24 10:18:16

最新调研进展:本贴中提及的问题已经在SpreadJSV17.0.9中得到优化,新版本已经发布,您可以通过升级SpreadJS的版本来解决该问题,并开启以下配置后重新计算就可以让SpreadJS和GcExcel计算结果一致了:
GC.Spread.CalcEngine.ExcelCompatibleCalcMode = true

本贴就先结帖了,后续有其他相关问题,欢迎发新帖询问
页: [1]
查看完整版本: SpreadJS显示和Excel不一致