Prevent JavaScript Number function from rounding big numbers

后端 未结 4 1956
自闭症患者
自闭症患者 2020-11-28 16:17

I have a string value \' 9223372036854775807 \'. I use Number() function in JavaScript to convert it to a number value using the following Code

var numericVa         


        
4条回答
  •  孤街浪徒
    2020-11-28 16:23

    You can compare strings that represent big integers as strings-

    a longer string of integers is larger, otherwise compare characters in order.

    You can sort an array of integer-strings

    function compareBigInts(a, b){
        if(a.length== b.length) return a>b? 1:-1;
        return a.length-b.length;
    }
    

    or return the larger of two strings of digits

    function getBiggestBigInts(a, b){
        if(a.length== b.length) return a>b? a:b;
        return a.length>b.length? a: b;
    }
    

    //examples

    var n1= '9223372036854775807', n2= '9223372056854775807',
    n3= '9223',n2= '9223372056854775817',n4= '9223372056854775';
    

    getBiggestBigInts(n1,n2);>> 9223372056854775807

    [n1,n2,n3,n4].sort(compareBigInts);>>

    9223
    9223372056854775
    9223372036854775807
    9223372056854775817
    

    Just make sure you are comparing strings.

    (If you use '-' minus values,a 'bigger' string value is less)

    By the way,you sort big decimals by splitting on the decimal point and comparing the integer parts. If the integers are the same length and are equal, look at the the decimal parts.

提交回复
热议问题