448,836 Members | 1,768 Online Need help? Post your question and get tips & solutions from a community of 448,836 IT Pros & Developers. It's quick & easy.

# How to compare two 20 digit numbers in javascript

 P: n/a hi frnds, Im having two 20digit numbers, But while comparing those it is giiving wrong ouput in javascript. for example here is my code, my secanrio is , ~ If first 20 digit number is greater number than second 20 digit number ,then it should return. * And another important thing is, the two 20digit number will be same but last one digit only change Code: So here txt1 value is greater than txt2 value, but it returning Correct alert. Please tel me reason why its returning like this, Is there any restriction for comparing more than 20 digits Jul 28 '06 #1
11 Replies

 P: n/a ba*****************@gmail.com said the following on 7/28/2006 1:44 AM: hi frnds, Im having two 20digit numbers, But while comparing those it is giiving wrong ouput in javascript. for example here is my code, my secanrio is , ~ If first 20 digit number is greater number than second 20 digit number ,then it should return. * And another important thing is, the two 20digit number will be same but last one digit only change If the only thing that can change is the last digit then simply compare the last character and it doesn't matter how long the "number" is if it is stored in a string.

 P: n/a ba*****************@gmail.com wrote: [...] So here txt1 value is greater than txt2 value, but it returning Correct alert. Please tel me reason why its returning like this, Is there any restriction for comparing more than 20 digits Yes, absolutely. If only the last digit needs to be compared, then Randy has answered your question. However, if you want to compare large numbers as numbers, read the following thread: >From that thread: "The representable range is +/-1.7976931348623157×10^308 (with numbers as small as +/-5×10^-324). The range of precise integer values is +/-9007199254740992 (+/-2^53)." Note that there are many integers in the representable range that can't be represented exactly, starting with integers of 16 digits. That is well short of your requirement for 20 digits. -- Rob Jul 28 '06 #3

 P: n/a Hi Randy, For a example only ,i told u the last character, It can be any digit in the whole number, So i want to compare the whole 20 digit number with other 20 digit number. I want know ,why is it not comparing correctly. Is there anyother way to compare Jul 28 '06 #4

 P: n/a Hi Randy, For a example only ,i told u the last character, It can be any digit in the whole number, So i want to compare the whole 20 digit number with other 20 digit number. I want know ,why is it not comparing correctly. Is there anyother way to compare Jul 28 '06 #5

 P: n/a HI Rob, Thanks for your information. Then there no way to compare this. My senario is like that, what can i do to solve this problem. Can u give me a suggestion. Jul 28 '06 #6

 P: n/a ba*****************@gmail.com said the following on 7/28/2006 2:51 AM: Hi Randy, For a example only ,i told u the last character, It can be any digit in the whole number, So i want to compare the whole 20 digit number with other 20 digit number. The value of a text input is a string. Do a string comparison and you don't run into the 16 digit limit. I want know ,why is it not comparing correctly. Is there anyother way to compare Compare them as strings. if (string1 == string2) -- Randy comp.lang.javascript FAQ - http://jibbering.com/faq & newsgroup weekly Javascript Best Practices - http://www.JavascriptToolbox.com/bestpractices/ Jul 28 '06 #7

 P: n/a ba*****************@gmail.com wrote: HI Rob, Thanks for your information. Then there no way to compare this. My senario is like that, what can i do to solve this problem. Can u give me a suggestion. An algorithm is: - get the values as strings (input elements will return strings) - check they are both integers - remove leading zeros - the longest one is bigger - if they are the same length, check digit by digit - if the numbers are really big, chec, blocks of say 10 digits at a time. e.g. the following example returns true only if a and b are integers and a is bigger than b. If a or b aren't integers, 'undefined' is returned. Otherwise, if b is bigger or equal to a, false is returned. function isBigger(a, b) { // Make sure they are integers var re = new RegExp('\\D','g'); if (re.test(a) || re.test(b)){ return undefined; } // Trim leading zeros a = a.replace(/^0+/g,''); b = b.replace(/^0+/g,''); // Check lengths if (a.length != b.length){ return (a.length b.length); } // Compare digits var a = a.split(''); var b = b.split(''); for (var i=0, j=a.length; i

 P: n/a RobG said the following on 7/28/2006 5:07 AM: ba*****************@gmail.com wrote: >HI Rob, Thanks for your information. Then there no way to compare this. My senario is like that, what can i do to solve this problem. Can u give me a suggestion. An algorithm is: - get the values as strings (input elements will return strings) - check they are both integers - remove leading zeros If they are defined in the HTML then you can be pretty assured whether they are numbers or not, but even then, comparing them as strings is simpler and easier. After removing the leading zeros, if they are equal as strings they must be equal as numbers. If they aren't equal as strings then they aren't equal as numbers. -- Randy comp.lang.javascript FAQ - http://jibbering.com/faq & newsgroup weekly Javascript Best Practices - http://www.JavascriptToolbox.com/bestpractices/ Jul 28 '06 #9

 P: n/a RobG wrote: ba*****************@gmail.com wrote: HI Rob, Thanks for your information. Then there no way to compare this. My senario is like that, what can i do to solve this problem. Can u give me a suggestion. An algorithm is: - get the values as strings (input elements will return strings) - check they are both integers - remove leading zeros - the longest one is bigger - if they are the same length, check digit by digit - if the numbers are really big, chec, blocks of say 10 digits at a time. e.g. the following example returns true only if a and b are integers and a is bigger than b. If a or b aren't integers, 'undefined' is returned. Otherwise, if b is bigger or equal to a, false is returned. function isBigger(a, b) { // Make sure they are integers var re = new RegExp('\\D','g'); if (re.test(a) || re.test(b)){ return undefined; } // Trim leading zeros a = a.replace(/^0+/g,''); b = b.replace(/^0+/g,''); // Check lengths if (a.length != b.length){ return (a.length b.length); } // Compare digits var a = a.split(''); var b = b.split(''); for (var i=0, j=a.length; i0){ var cnt = thisLength-1; while( greater==0 && cnt >= 0 ){ greater = this.parts[cnt] - num.parts[cnt]; cnt--; } } else { greater = (thisLength numLength)?(1):(-1); } return greater; } } Granted, creating an array of numbers is probably overkill for simple comparison it does simplify extending to allow mathematical operations pretty easily. The original number check function could be modified to use this like: function numberCheck() { var val1=document.getElementById('txt1').value; var val2=document.getElementById('txt2').value; var val1Bigint = new BigInteger(val1); var val2Bigint = new BigInteger(val2); var comp = val1Bigint.compare(val2Bigint); if(comp==0) { alert("Equal"); } else if(comp>0){ alert("Greater") } else { alert("Less"); } } Jul 28 '06 #10

 P: n/a JRS: In article <11**********************@b28g2000cwb.googlegroups .com> , dated Fri, 28 Jul 2006 02:07:30 remote, seen in news:comp.lang.javascript, RobG ba*****************@gmail.com wrote: > Can u give me a suggestion. That must seem very polite, to a Burmese. >An algorithm is: - get the values as strings (input elements will return strings) - check they are both integers But -79, +3, 123e45, 123e4567 are all integers. *Probably* he means all-digit strings. - remove leading zeros Probably. But 077 = 0x3F = 63 = 0.63e2, maybe. >function isBigger(a, b){ // Make sure they are integers var re = new RegExp('\\D','g'); I don't see that 'g' is needed, any non-digit fails an all-digit format. if (re.test(a) || re.test(b)){ return undefined; } // Trim leading zeros a = a.replace(/^0+/g,''); b = b.replace(/^0+/g,''); Ditto. // Check lengths if (a.length != b.length){ return (a.length b.length); } // Compare digits var a = a.split(''); var b = b.split(''); for (var i=0, j=a.length; i? JL/RC: FAQ of news:comp.lang.javascript

 P: n/a Hi john, Thanks for suggestion, Its working fine. Aug 3 '06 #12

### This discussion thread is closed

Replies have been disabled for this discussion. 