`
rikugun
  • 浏览: 351038 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

超大数字的比较

    博客分类:
  • Js
阅读更多
这段时间在写程序的时候发现一个问题,js所支持的数字精度只有16位,超过这个位数的数字后面的精度会丢失,变成 '0000'.

比如
var a = 12345678901234567890; //20位 
var b = 12345678901234567891;

//a,b 在firebug 中都显示为 12345678901234567000
alert(b-a); // 0


Google一下,没有发现合适的解决方法.自己写了一个.

function CompareBigNumber(bigger,smaller){

	//分段正负补值
	var temp_i = 0 ;
	
	var alldiff ='',diff;
	//长度在16位内直接返回计算结果
	if(bigger.length <17 && smaller.length < 17) return (bigger-smaller);
	
	//分段比较
	for(var i=0; i<bigger.length || i < smaller.length ;i = i+16){
	
	var b = parseInt(bigger.substring(bigger.length -(16+i),bigger.length - i));
	var s = parseInt(smaller.substring(smaller.length -(16+i),smaller.length - i));
	diff = (b-s);
	//处理借位
	diff += temp_i
	//如果此段比较值为负,且不是最前头的一段,则向前面部分借位
	if(diff < 0 && (bigger.length - i ) > 16 || (smaller.length - i ) > 16){
	temp_i = -1;
	diff = 1e16 + diff;
	}else{
	temp_i = 0;
	var pad = '';
	//补零
	for(var j=0;j< (16 - (diff+'').length );j++){
		pad +='0';
	}
	diff = pad + diff;
	}
	alldiff = diff + '' + alldiff;
	}
	//删除前头的0,如果结果是'0' 就全删掉了 
	alldiff.replace(/^0+([0-9]*)/,'$1');
	//如果结果是 ''
	if(alldiff =='') alldiff = '0';
	return alldiff;
}


CompareBigNumber('12345678901234567890','12345678901234567891'); //-1
CompareBigNumber('12345678901234567891','12345678901234567890'); //1


FireFox 3.5.2 下测试通过
分享到:
评论

相关推荐

    超大数字运算的VB6例子(一)

    在VB6(Visual Basic 6)环境中,处理超大数字是一项挑战,因为内置的数据类型如Integer、Long等都有其数值范围限制。然而,通过自定义数据结构和算法,我们可以实现对超大数字的运算,例如加法、减法、乘法以及阶乘...

    hugeMCalc超大数字高精度计算器

    《hugeMCalc超大数字高精度计算器:深入解析与应用》 在计算机科学领域,处理超大数字是一项挑战,尤其是在大数据分析和高级算法计算中。为了解决这一问题,我们有了一款名为“hugeMCalc”的超大数字高精度计算器。...

    finereport格式化金额函数js中进行数字超大金额千位符格式化处理.docx

    "finereport格式化金额函数js中进行数字超大金额千位符格式化处理" 本文主要讲解了finereport格式化金额函数在JS中进行数字超大金额千位符格式化处理的方法。该需求在前端开发中非常普遍,例如音乐app中的歌曲播放...

    MOS数字大规模及超大规模集成电路.pdf

    根据提供的文件信息,“MOS数字大规模及超大规模集成电路”这一标题揭示了本书的主题是围绕MOS(Metal-Oxide-Semiconductor,金属-氧化物-半导体)技术在大规模(LSI, Large-Scale Integration)与超大规模(VLSI, ...

    MOS数字大规模及超大规模集成电路

    《MOS数字大规模及超大规模集成电路详解》 MOS(Metal-Oxide-Semiconductor,金属-氧化物-半导体)数字集成电路是现代电子技术中的重要组成部分,尤其在大规模及超大规模集成电路(LSI和VLSI)领域,其地位更是不可...

    C++ 超大数加减乘除幂计算

    通常,我们可以使用字符串或整数数组来存储超大数,因为这两种方式都能方便地表示任意长度的数字。 1. **超大数的表示**: - 字符串:每个字符代表一个数字,例如,"12345"代表一个五位数。 - 整数数组:数组中的...

    VLSI测试:数字、存储器和混合信号系统

    VLSI(Very Large Scale Integration,超大规模集成电路)测试是电子与通信领域中的重要分支,它关注于数字、存储器和混合信号系统集成电路的测试与验证,以确保芯片和相关系统的质量和可靠性。VLSI测试不仅包括测试...

    PHP采纳超长(超大)数字运算防止数字以科学计数法显示的方法_.docx

    PHP 超长数字运算防止数字以科学计数法显示的方法 PHP 中对超长数字的运算是非常重要的,因为当数字太大时,...因此,使用 string 类型和 bcmath 函数,可以轻松地进行 PHP 超大数值运算,并避免数字变成科学计数法。

    数字逻辑电路基础(77页).pdf

    根据集成度,数字电路可以分为小规模(SSI)、中规模(MSI)、大规模(LSI)和超大规模(VLSI)。 六、进位制 进位制是指数字信号在电路中的表示方法。进位制可以分为二进制、八进制、十进制和十六进制等。每种...

    数字逻辑与数字电路教学课件

    根据集成度和功能,数字电路可进一步分为小规模、中规模、大规模、超大规模集成电路,以及组合逻辑电路和时序逻辑电路。 其次,课程讲解了数制与编码。数制是进位计数的规则,例如常见的十进制和二进制。十进制有10...

    数字电子技术基础PDF

    - 超大规模集成电路(Very Large-Scale Integration, VLSI): 每片元件数目大于1万个。 2. **按制作工艺分类**: - 双极型(TTL): 使用双极型晶体管技术。 - 单极型(MOS): 使用金属氧化物半导体场效应管技术。 3. *...

    PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法

    在PHP中,处理超大数字时,由于内置的数据类型限制,当数字的位数超过一定长度,PHP会自动将其转换为科学计数法表示。这可能会导致运算结果不准确或不符合预期。为了解决这个问题,我们可以采取一些策略来确保数字以...

    清华大学研究生大规模数字集成电路讲义含作业答案

    数字集成电路是现代电子技术中不可或缺的部分,尤其在高速发展的信息时代,其设计与优化对于各类电子系统性能的提升起到了至关重要的作用。清华大学作为中国顶尖的高等学府,其研究生课程所使用的《大规模数字集成...

    数字电路康华光习题解答

    * 数字集成电路可以根据集成度的大小分为小规模、medium规模、大规模和超大规模集成电路 * 例如,微处理器属于超大规模集成电路,IC计算器属于大规模集成电路,IC加法器属于中规模集成电路,逻辑门属于小规模集成...

    数字电路基础.pdf

    集成电路可以分为不同的规模,比如小规模集成电路(SSI)、中规模集成电路(MSI)、大规模集成电路(LSI)和超大规模集成电路(VLSI)。 7. 数字电路的实现:数字电路可以通过各种方式实现,包括使用分立元件,如...

    数字频率计开题报告

    由于大规模和超大规模数字集成电路技术、数据通信技术与单片机技术的结合,数字频率计发展进入了智能化和微型化的新阶段。其功能进一步扩大,除了测量频率、频率比、周期、时间、相位、相位差等基本功能外,还具有...

    数字大规模集成电路.rar

    《数字大规模集成电路》是关于集成电路设计的一门深入教程,尤其关注FPGA(Field-Programmable Gate Array)和CPLD(Complex Programmable Logic Device)这两个领域的应用。VLSI,即Very Large Scale Integration,...

    数字抢答器课程设计.doc

    数字逻辑器件从 60 年代的小规模集成电路(SSI)发展到目前的中、大规模集成电路(MSI、LSI)及超大规模集成电路(VLSI),相应地,数字逻辑电路的设计方法在不断地演变和发展。 知识点二:抢答器的设计要求 设计...

    数字五笔2013绿色版

    最新功能:完美支持Vista系统,支持5万超大词组,支持连续词组输入,支持在线造词!优化输入设置。支持skype下标点输入。 在简单性、输入速度、重码率等性能指标上全面挑战海内外数字输入技术:T9、五笔数码、H3! ...

    数字逻辑基础与Verilog设计.pdf

    它被广泛应用于VLSI(超大规模集成电路)设计中,允许设计师以高级抽象的方式描述电路,然后通过综合工具自动转换成具体的门级网表。 #### Verilog基本语法 Verilog的基本语法包括模块定义、端口声明、数据类型、...

Global site tag (gtag.js) - Google Analytics