javascript大数运算

当数字超过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),在实际项目中分解的位数可以根据项目需要定义为定数。如果运算数字太大可以进行多次分解。通过此方法也可以进行乘方运算。 初次写博,先说到这,希望以上内容对大家解决类似问题有所帮助,代码我就不写了,不足之处欢迎各位同行来指正。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值