如何计算超出精度数字的加减运算
来源:互联网 发布:认知网络 运筹优化 编辑:程序博客网 时间:2024/05/23 02:05
使用javascript计算如下的结果:
63298532574392574384 + 1 = ?
结果:63298532574392570000
为什么会出现这种情况呢?不应该是63298532574392574385吗?这引发了我的思考
得到结果后可以看出,直接处理肯定是不行了。因为这段数字超出了Number数据类型的精度,javascript 不能存这么长的数字。如果必须运算的话那只能通过其他的方式来代替,那么该如何解决这个问题呢?
一、字符串处理方式
回想javascript的基本类型,能存储任意长度的内容只有字符串类型了。基于这个想法的话,就需要把Number类型转化成字符串类型使用,使用 toString() 方法可以转化成字符串,把字符串分割成两部分,然后用后面的一段转化成number类型去加1,最后再转换成字符串和第一段自负串链接起来。
var num = "63298532574392574384"
var str1 = num.substring(0,10)
var str2 = num.substring(10)
var str3 =parseInt(str2) + 1
var str = str1 + str3 // "63298532574392574385"
虽然说能解决这个问题,但是存在几个问题:
- 在何处截取字符串?
- 如果截取字符串的地方存在进位怎么办?
这都是有可能存在的,显然不能推广使用。
二、转化成数组处理
我相信你看到标题就应该能想到,基于第一段的处理方式把字符串截成两节,如果是很长呢?这样截取显然不行,那只能回到最初的,把字符串的每个字母都截取存放在一个数组中。使用最后一个数字去加一但是这里要考虑到进位操作。直接上代码:
var num = "63298532574392574384"var arr = num.split('');var newNum = calculate(arr).join('') // 63298532574392574385
function calculate(arr){ var last; if (arr.length == 0) { last = 0; }else{ last = arr.pop(); } if (last == 9) { last = 0; arr = calculate(arr); }else{ last = last - 0 + 1; //转化成数字 } arr.push(last); return arr;}
- 如何计算超出精度数字的加减运算
- 计算加减运算
- 如何验证计算的精度
- 如何进行时间的加减运算
- java double类型加减运算时出现的精度丢失问题
- javascript 中浮点型数字的运算精度
- javascript 中浮点型数字的运算精度
- javascript中浮点型数字的运算精度
- 运算 double类型的数字相加不丢失精度
- BigInteger和BigDecimal--数字运算精度的设置
- BigInteger类,BigDecimal类,超大数字的运算与精度
- js中数字计算精度
- js中数字计算精度
- java 数字计算精度问题
- JS中数字计算精度
- JS中数字计算精度
- 指针的加减运算
- 复数的加减运算
- 解决Chrome浏览器左键双击没反应,无法启动
- MYSQL数据导出与导入,secure_file_priv参数设置
- Java常见API-Date类、DateFormat类、Calendar类
- Android组件学习笔记(AlertDialog)
- Ubuntu17+下安装Mysql5.7+配置字符集
- 如何计算超出精度数字的加减运算
- TensorFlow学习笔记2
- python study notes
- tomcat8项目部署在tomcat7上
- 网页静态化技术Freemarker
- html基础-图片标签、表格的属性、链接的属性及链接的分类、name定义锚点的名称、网页的自动刷新、基本字符
- 中间件的项目应用案例 ——《金风科技全球监控中心》
- monkeytest方法-20171113
- crontab定时任务不执行