2019-05-21


在Javascript中,获取到数字超出长度问题

今天给大家分享的是在Javascript中,获取到数字超出长度问题。

实战背景

        在和web前端API对接的时候发现获取到的ID和生成的不一致,导致操作用户数据的时候一直有问题,最后定位到是ID后端数据类型和Javascript中的数据类型不一致。

问题原因

        JavaScript中所有的数字,无论是整数还是小数,其类型均为Number。在程序内部,Number类型的实质是一个64位的浮点数,这与Java中double类型的浮点数是一致的;因此,JavaScript中所有的数都是浮点数。遵循IEEE 754标准(浮点数算术标准),JavaScript所能表示的数值范围为正负1.7976931348623157乘以10的308次方,其最小所能表示的小数为正负5乘以10的负324次方,这两个边界值可以分别通过访问Number对象的MAX_VALUE属性和MIN_VALUE属性来获取。

        对于整数,根据ECMAScript标准的要求,JavaScript能表示并进行精确算术运算的整数范围为:正负2的53次方,也即从最小值-9007199254740992到最大值+9007199254740992之间的范围;对于超过这个范围的整数,JavaScript依旧可以进行运算,但却不保证运算结果的精度。值得注意的是,对于整数的位运算(比如移位等操作),JavaScript仅支持32位整型数,也即从-2147483648到+2147483647之间的

解决方案1

        数据库设计的时候用varchar(20),那么会映射为String类型,就不会出现这种问题

解决方案2

        如果项目已经成型并且修改数据库会造成不可预料的问题那么可以在User对象中再增加一个String类型id映射字段,如下privateLong         userId;privateString userIdStr;

        publicStringgetUserIdStr() {

                returnthis.userId+"";    

         }

           publicvoidsetUserIdStr(String userIdStr) {

                this.userIdStr = userIdStr;   

            }

那么和前端交互的时候可以使用userIdStr字段 因为是String 类型的,规避掉这个问题。

目前解决解决方案依赖于后台修改,如前前端有好的建议,可以私信。。。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 江柏文:早间黄金走势分析 投资不是一潭死水,偶尔会有一些风吹草动,一路风景一路的歌。行情就是如此,它不断地将礼物送...
    江柏文阅读 115评论 0 0
  • 过去做事情急,什么东西拿起来就用,不喜欢进行系统性的学习,造成在使用过程中的错误和低效,现在感觉自己耐心多了,用之...
    马文Marvin阅读 2,040评论 0 10
  • 我家住在钱塘江边,每天奔波在工作学习和家庭琐事上,无暇欣赏风景,但偶尔看到的江景、潮水,还是常常让我震撼。 那天傍...
    眉痕成水阅读 241评论 0 0
  • 《秋》 作者:陈序 高二上了俩礼拜,课表儿没变,一天八节课,一礼拜五天。 到校时间和放学时间都...
    陈序原创阅读 446评论 0 3
  • 你快乐吗? 如果我回答这个问题,我会犹豫一下,然后说好像不是太快乐。 那为什么不快乐呢? 因为有欲望,与人比较,渴...
    笑笑8阅读 122评论 0 1