概述
当数字超过15位相加的时候会出现科学计数法 精度就成了问题 如果还有小数也是.例如:9999999999*999999999用javascript计算就 不会得到9999999989000000001结果。在网上查找相关资料都没有得到满意的答案,经过自己思考,终于找到了一个满意的解决大数运算问题的 方法,下面我说说我的思路。以下内容中的位数假定右前左后。 9999999999*999999999可以分解成 (9999990000+9999)*(999990000+9999)=9999990000*999990000+9999990000*9999+9999*999990000+9999*9999, 那么我们可以先得到9999999999*999999999的前8位数,根据上面的因式分解,显然 9999999999*999999999和9999990000*9999+9999*999990000+9999*9999的前8位数是一致的。9999*9999=99980001那么9999990000*9999+9999*999990000+9999*9999的前4位数是‘0001’。那么 9999990000*9999+9999*999990000+9999*9999结果的4位后的值就是 999999*9999+9999*99999+9998=10998890000。‘10998890000’与‘0001’拼接得到‘109988900000001’这样 9999999999*999999999的前8位是‘00000001’。 因为 9999999999*999999999 =9999990000*999990000+9999990000*9999+9999*999990000+9999*9999 =9999990000*999990000+109988900000001 那么9999999999*999999999结果前8位后的数就是999999*99999+1099889=99999999890,‘99999999890’与‘00000001’拼接得到‘9999999989000000001’,这是不是我们想要的结果呢? 上边的数字有些特殊,但是基本原则是一致的,基本思路就是通过我们初中学到的因式分解可以把运算的结果分段得到,然后进行字符串拼接。 例如:234567783347*8734355345可以分解成(234567000000+783347)*(8734300000+55345),在实际项目中分解的位数可以根据项目需要定义为定数。如果运算数字太大可以进行多次分解。通过此方法也可以进行乘方运算。 初次写博,先说到这,希望以上内容对大家解决类似问题有所帮助,代码我就不写了,不足之处欢迎各位同行来指正。
最后
以上就是优美香水为你收集整理的javascript大数运算的全部内容,希望文章能够帮你解决javascript大数运算所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复