找回密码
 立即注册

QQ登录

只需一步,快速开始

大Vi

中级会员

140

主题

309

帖子

975

积分

中级会员

积分
975
大Vi
中级会员   /  发表于:2022-7-25 10:57  /   查看:1025  /  回复:3
1金币
输入9999999999999998 valueChanged的newValue没问题,是原值9999999999999998
输入9999999999999999   valueChanged的newValue会变成10000000000000000




还有输入多少位newValue会变成科学计数法呢?

最佳答案

查看完整内容

spreadjs 和excel 对于数字的处理都是15位精度,大于15位就会被处理成科学计数法,因此“9999999999999998 ”和“9999999999999999”都会被处理为科学计数法,如果你设置了数字格式,也都会显示为“10000000000000000.00”,个位0是无效的,前面的是四舍五入进位上去的 但是在你说的valueChanged事件中来获取,或者是直接通过单元格的getValue来获取的话,目前会和实际显示的数字值(已经发生精度损失)也不相同,具体可以参考下 ...

3 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-7-25 10:57:35
来自 2#
本帖最后由 Richard.Ma 于 2022-7-25 16:03 编辑

spreadjs 和excel 对于数字的处理都是15位精度,大于15位就会被处理成科学计数法,因此“9999999999999998 ”和“9999999999999999”都会被处理为科学计数法,如果你设置了数字格式,也都会显示为“10000000000000000.00”,个位0是无效的,前面的是四舍五入进位上去的

但是在你说的valueChanged事件中来获取,或者是直接通过单元格的getValue来获取的话,目前会和实际显示的数字值(已经发生精度损失)也不相同,具体可以参考下面的第三列,

image.png414664916.png

如果你的需求是想要newValue和输入值相同的话,建议设置单元格为文本格式,或者通过代码设置单元格值的时候设置为数字字符串,即可不受精度影响
setValue("9999999999999999")
image.png88914794.png
回复 使用道具 举报
大Vi
中级会员   /  发表于:2022-7-25 16:21:25
3#
Richard.Ma 发表于 2022-7-25 16:00
spreadjs 和excel 对于数字的处理都是15位精度,大于15位就会被处理成科学计数法,因此“9999999999999998  ...

单元格设置为字符串的话,就会使这一列公式计算有问题吧,字符串没法用求和了
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-7-25 16:49:08
4#
是的,不过这个也得看你使用的场景,以文本形式存储的数字,在spreadjs和excel中表现不一样,

在spreadjs中, 可以作为引用单元格参与计算比如A3=A1+A2,在A1和A2都是文本单元格的情况下,仍然可以计算出A3的值,(当然结果仍然是15位精度)

在excel中,没法用于公式中作为引用单元格参与计算,公式会报错,

所以如果你仅在spreadjs中使用的话,可以这样设置来计算,但导出为excel后公式会发生错误。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部