如何计算超出精度数字的加减运算

今天给大家分享的是:如何计算超出精度数字的加减运算,希望大家看完能有所收获哦~


使用javascript计算如下的结果:

63298532574392574384 + 1 = ?

结果:63298532574392570000

为什么会出现这种情况呢?不应该是63298532574392574385吗?这引发了我的思考

这段数字超出了Number数据类型的精度,那么该如何解决这个问题呢?

如果你想学习前端可以来这个Q群,首先是291,中间是851,最后是189,里面可以学习和交流,也有资料可以下载。

一、字符串处理方式

直接处理肯定是不行了,js不能存这么长的数字,如果必须存起来的话,回想js的基本类型也只有字符串了。这样的话就是把number类型转化成字符串类型使用 toString() 方法,然后把字符串分割成两部分,然后用后面的一段转化成number类型去加1,最后再转换成字符串和第一段自负串链接起来。虽然说能解决这个问题,但是存在几个问题:

1、在何处截取字符串?

2、如果截取字符串的地方存在进位怎么办?

这都是有可能存在的,显然不能推广使用。


二、转化成数组处理

我相信你看到标题就应该能想到,基于第一段的处理方式把字符串截成两节,如果是很长呢?这样截取显然不行,那只能回到最初的,把字符串的每个字母都截取存放在一个数组中。使用最后一个数字去加一但是这里要考虑到进位操作。直接上代码:


var arr = num.split('');
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;
}

时间: 2024-09-11 10:09:15

如何计算超出精度数字的加减运算的相关文章

C语言实现大整数加减运算详解_C 语言

前言     我们知道,在数学中,数值的大小是没有上限的,但是在计算机中,由于字长的限制,计算机所能表示的范围是有限的,当我们对比较小的数进行运算时,如:1234+5678,这样的数值并没有超出计算机的表示范围,所以可以运算.但是当我们在实际的应用中进行大量的数据处理时,会发现参与运算的数往往超过计算机的基本数据类型的表示范围,比如说,在天文学上,如果一个星球距离我们为100万光年,那么我们将其化简为公里,或者是米的时候,我们会发现这是一个很大的数.这样计算机将无法对其进行直接计算.     可

js实现文本框支持加减运算的方法_javascript技巧

本文实例讲述了js实现文本框支持加减运算的方法.分享给大家供大家参考.具体如下: 这是一个网页表单效果,让表单内的文本框支持加减运算,不过你要按正确的运算式输入,要不然它没有那么智能哦,比如输入1+5,文本框旁边会显示计算结果,这要归功于JavaScript的功能. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-math-input-method-codes/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3

c语言-我写的是两个数的加减运算,以字符串数组形式保存

问题描述 我写的是两个数的加减运算,以字符串数组形式保存 #include #include void main(void) { char str1[30]={0}; char str2[30]={0}; char str3[30]={0}; printf("Please input the first number:"); gets(str1); printf("Please input the second number:"); gets(str3); add(

Vdsp(bf561)中的浮点运算(6):float加减运算

一直以为float加减运算很简单,无非就是将之转换为__float32_add和__float32_sub这两个函数调用而已,然后用软件模拟进行加减运算.但真的如此简单吗?当一些让人不太舒服的条件出现的时候,还是如此吗? 1.1 Vdsp对float加减运算的处理 在vdsp下,可以很简单地用: float add(float x, float y) { float r = x + y; return r; } float sub(float x, float y) { float r = x

图像加减运算,为什么输出结果不对

问题描述 图像加减运算,为什么输出结果不对 #include #include #include #include #include using namespace std; //图像加减运算 //unsigned char *lpSrc1:原图像1像素指针 //unsigned char *lpSrc2:原图像2像素指针 //unsigned char *lpDst:目标像素指针 int main() { IplImage * image1, *image2, *image3; image1

redicate-用Specification组装查询条件时,如何添加两个字段比较或加减运算的查询条件?

问题描述 用Specification组装查询条件时,如何添加两个字段比较或加减运算的查询条件? 我们知道添加下面这样查询条件很容易,只是比较一个字段的: Predicate p = builder.equal(root.get("age"), 30); 如果 需要添加的条件是,假如表是t,字段aaa 是总月数,字段bbb是已过去的月数 我们要查询 剩余月数是3的记录,如何添加 t.aaa-t.bbb = 3 这样的查询条件? 或者添加 t.aaa > t.bbb 这样的条件?

c-自增或自减变量加减运算结束后结果为什么还要再进行一次自增或自减?

问题描述 自增或自减变量加减运算结束后结果为什么还要再进行一次自增或自减? <?php $a = 10; $b = ($a++) + (++$a); echo $b; ?> 结果是 22 为什么呀 解决方案 http://www.guokr.com/blog/471312/ 这种问题可以不用再讨论了. 解决方案二: 第三行的($a++) 本身是10,但如果只是这样的话打印的结果也为10(先运算再自增的),首先假设C=B+(A++),B首先看到的是A本身,因为运算式还没结束,那么它还会向后面找,

ThinkPHP自定义函数解决模板标签加减运算的方法_php实例

本文实例讲述了ThinkPHP自定义函数解决模板标签加减运算的方法.分享给大家供大家参考.具体如下: 实际项目中,我们经常需要标签变量加减运算的操作.但是,在ThinkPHP中,并不支持模板变量直接运算的操作. 幸运的是,它提供了自定义函数的方法,我们可以利用自定义函数解决: ThinkPHP模板自定义函数语法如下: 格式:{:function(-)} (参考官方帮助文档:http://thinkphp.cn/Manual/196) 利用这个,我们来试做加法和减法. 一.在ThinkPHP中定义

ASP 日期的加减运算实现代码_应用技巧

举个例子来说,要查找出2007-10-12至2007-10-31之间在网站上注册的会员,选择好日期后,点击"查询"按钮,发现2007-10-31注册的会员的信息根本没有显示出来,试验了几次结果都是一样.调试程序发现,原来是在SQL语句这里出现了问题. SQL语句如下:SELECT * FROM userinfo WHERE regtime >= '2007-10-12' AND regtime <= '2007-10-31'.初看上去这条SQL语句没有错误,可是对照数据库中