找回密码
 立即注册

QQ登录

只需一步,快速开始

柠能

金牌服务用户

23

主题

45

帖子

204

积分

金牌服务用户

积分
204
柠能
金牌服务用户   /  发表于:2023-1-13 00:34  /   查看:1776  /  回复:6
1金币

所用gradle依赖 : implementation group: 'com.grapecity.documents', name: 'gcexcel', version: '4.0.0'
image.png904166259.png
问题描述: 如图 跨sheet取数, 913708007752623213,公式计算后取出来的结果为9.1370800775262323E17  科学计数法结果丢失了精度



最佳答案

查看完整内容

不是因为科学计数法而损失了精度,根本的原因是这是MSExcel的设计,GcExcel也遵循相同的设计,包括SpreadJS也是这样。 Excel 中的最大有效数字位数为 15。任何超过 15 个有效数字的数字都将被限制为 15 个数字。并以科学计数法来显示 GcExcel中下面的选项可以将 BigDecimal 视为对象而不是 double (你可以创建一个BigDecimal 替代Long来作为单元格值),但是仅在getvalue或导出 pdf时生效, 代码设置如下 完整代码 ...

6 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-1-13 00:34:50
来自 2#
不是因为科学计数法而损失了精度,根本的原因是这是MSExcel的设计,GcExcel也遵循相同的设计,包括SpreadJS也是这样。

Excel 中的最大有效数字位数为 15。任何超过 15 个有效数字的数字都将被限制为 15 个数字。并以科学计数法来显示

GcExcel中下面的选项可以将 BigDecimal 视为对象而不是 double (你可以创建一个BigDecimal 替代Long来作为单元格值),但是仅在getvalue或导出 pdf时生效,

代码设置如下
  1. workbook.getOptions().getData().setBigDecimalAsDouble(false);
复制代码


完整代码截图,可以看到getValue拿到的仍然是完整的长度
image.png396325988.png


上述设置,在导出excel时这个单元格会显示为空(excel不支持显示BigDecimal,也不支持显示15位以上有效数字 ),这个问题,可以在需要导出xlsx时,先把上面的setBigDecimalAsDouble设置回来为true。就能正常导出按照15位科学计数法显示的xlsx文件了
回复 使用道具 举报
柠能
金牌服务用户   /  发表于:2023-1-13 12:12:40
3#
Richard.Ma 发表于 2023-1-13 09:42
不是因为科学计数法而损失了精度,根本的原因是这是MSExcel的设计,GcExcel也遵循相同的设计,包括SpreadJS ...

请问你这个demo图片的依赖版本是多少,我用的4.0.0没有你图片里的这个setBigDecimalAsDouble的方法
回复 使用道具 举报
柠能
金牌服务用户   /  发表于:2023-1-13 12:20:33
4#
麻烦请提供一个最低的可以用这个方法的版本
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-1-13 14:34:28
5#
5.0.3中添加了这个功能
回复 使用道具 举报
柠能
金牌服务用户   /  发表于:2023-1-13 20:24:51
6#
我给单元格设置的值是字符串类型,公式是=这个单元格 怎么计算出来的结果是一个科学技术法,gcexcel计算公式的结果如果是数字字符串 都统一返回是数值类型的嘛,之前有发现对2023.01公式取前4位 出现返回会补一个默认.0的情况 结果为2023.0
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-1-16 10:01:47
7#
字符串作为公式的引用单元格的话,返回的结果还是字符串,除非你做了数字计算,
excel本身是不支持数字字符串计算的(计算结果是空或者#value)
gcexcel和spreadjs 这块对数字字符串计算也做了支持,所以可以返回结果。但是返回的数字由于上面提到的原因,还是和excel保持一致,大于15位会的数字被省略


之前有发现对2023.01公式取前4位 出现返回会补一个默认.0的情况 结果为2023.0

这个我不知道你指的是什么情况?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部