找回密码
 立即注册

QQ登录

只需一步,快速开始

viperous_devil
金牌服务用户   /  发表于:2019-5-22 16:33  /   查看:5024  /  回复:9
手头填写数字,然后数字变成了科学计数法,为了不让他变,还加上了General,但是并不好用,使用函数读取数据的时候,那个单元格的数据就是字符类型的科学计数法。这种情况有什么解决办法吗?

9 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-5-22 17:32:25
沙发
您好,请问您使用的是V12.1.0版本吗?新版添加了新功能,在列宽不够时会自动显示科学计数法或###号。
参考API:

https://demo.grapecity.com.cn/sp ... randDateFormat.html
回复 使用道具 举报
viperous_devil
金牌服务用户   /  发表于:2019-5-22 17:52:42
板凳
我用的v11版的, 图片.png679355773.png , 图片.png851173705.png
回复 使用道具 举报
viperous_devil
金牌服务用户   /  发表于:2019-5-22 17:53:29
地板
大概就是修改第102 行的数字的时候,如果位数比较多的话,这个数字就会变成科学计数法
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-5-22 18:23:42
5#
您好,数字格式默认会被转为科学计数法,101行向上的数字实际上在赋值的时候给的是字符串,

您可以参照这个示例,为数字定义格式,或者通过自定义格式来实现,参考:

https://demo.grapecity.com.cn/Sp ... mos/customFormatter
回复 使用道具 举报
viperous_devil
金牌服务用户   /  发表于:2019-6-3 16:12:37
6#
我之前在另外的一个帖子上也问过这个类似科学计数法的问题,后来你让我用Formater做处理。但是我没啥思路,然后就用的这样的格式也是不行的。function CustomNumberFormat() {

}

CustomNumberFormat.prototype = new GC.Spread.Formatter.FormatterBase();

CustomNumberFormat.prototype.format = function (obj, formattedData) {
    return obj ? obj.toString() : "";
};

CustomNumberFormat.prototype.parse = function (str) {
    return new GC.Spread.Formatter.GeneralFormatter().parse(str);
};
具体的话应该如何写这个Format 呢?
回复 使用道具 举报
viperous_devil
金牌服务用户   /  发表于:2019-6-3 17:39:25
7#
看到请回复下,如何写这个CustomNumberFormat才能解决科学计数法的问题,以及超过15或者16位就错误的问题
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-6-4 11:10:31
8#
您好,我给您提供一个现成的Demo,您可以参考一下,见附件。
附件Demo演示了如何自定义显示单元格的数字信息。

CustomFormatter.html

3.62 KB, 下载次数: 215

回复 使用道具 举报
viperous_devil
金牌服务用户   /  发表于:2019-6-4 11:35:43
9#
KevinChen 发表于 2019-6-4 11:10
您好,我给您提供一个现成的Demo,您可以参考一下,见附件。
附件Demo演示了如何自定义显示单元格的数字信 ...

按照你的写法弄好了之后,然后修改那个单元格 的数据之后,如果比较长还是会变成科学计数法
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-6-4 14:49:13
10#
您好,在这个Demo中,实际上是演示了自定义格式怎么发挥作用,如代码所示:

  1. customFormatterTest.format = function (obj, conditionalForeColor) {
  2.             return number_format(obj, 2, ".", ",");
  3.         };
复制代码


在format方法中,实际上可以把obj(也就是单元格的值)根据您自己的需求来设置。


如果您只是希望设置一个很长的数字,最简单,精度也不会损失的方法就是把单元格类型设置为文本格式,

如图所示:

image.png243843993.png

image.png747303466.png

但是限于JavaScript的限制,如果这些单元格的值参与了函数计算,那么得到的结果仍然会显示成科学计数法,如图:

image.png884920959.png

image.png530861815.png

如果此时在B2单元格上设置自定义单元格格式,

那么就可以手动将科学计数法的数字转为字符串,如代码所示:

  1.         customFormatterTest.format = function (obj, conditionalForeColor) {
  2.             // return number_format(obj, 2, ".", ",");
  3.             return getFullNum(obj);
  4.         };

  5. function getFullNum(num){
  6.         //处理非数字
  7.         if(isNaN(num)){return num};
  8.         // 处理大数
  9.         num = new Number(num).toLocaleString();
  10.         //处理小数:处理不需要转换的数字
  11.         var str = ''+num;
  12.         if(!/e/i.test(str)){return num;};

  13.         return (num).toFixed(18).replace(/\.?0+$/, "");
  14.     }
复制代码


参考文章:

https://segmentfault.com/q/1010000010460890
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部