Сравните две большие переменные в javascript

У меня есть 2 большие переменные, и мне нужно сравнить, например:

var a =  15000000000000000000000001  // integer
var b = "15000000000000000000000000" // string

Во всех моих тестовых сравнениях получаются неправильные результаты. например:

  1. Преобразовать var b в целое число

    var a = 15000000000000000000000001
    var b = 15000000000000000000000000
    a > b // return false and is wrong
    
  2. Преобразовать var a в строку

    var a = "1500000000000000000000001"
    var b = "15000000000000000000000000"
    a > b // return true and is wrong
    

Мое решение:

function compareCheck(a,b){
    if (a.length > b.length) {
        return true;
    }
    else if (a.length == b.length) {
        if (a.localeCompare(b) > 0) {
            return true
        }
        else return false;
    }
    else return false;
}

var a = "15000000000000000000000001"
var b = "15000000000000000000000000"

compareCheck(a,b) // return true and is correct

var a = "1500000000000000000000001"
var b = "15000000000000000000000000"

compareCheck(a,b) // return false and is correct

Мой вопрос заключается в том, является ли найденное решение правильным или возникнут проблемы в будущем?


person Anuta Wascar    schedule 27.06.2013    source источник
comment
Извините за неконструктивность, но разве это не та проблема, которая возникает из-за такого языка, как Javascript, с его да, любым подходом к типам данных !!!   -  person bazza    schedule 27.06.2013
comment
Это зависит от того, что вы хотите получить за 00000001 > 900   -  person perreal    schedule 27.06.2013
comment
мои переменные никогда не начинаются с 0. В основном это числа, но пока у javascript есть проблемы с большими числами, мы должны преобразовать их в строки.   -  person Anuta Wascar    schedule 27.06.2013


Ответы (1)


Я считаю, что стандартной практикой здесь является вычитание одного числа из другого и сравнение его со значением эпсилон.

person AllTooSir    schedule 27.06.2013
comment
Это имеет смысл для одного из случаев сравнения двух целых чисел. Но решение OP показывает, что в случае двух строк ему нужна самая длинная, но если они одинаковы, сравнить что-то еще? - person damienc88; 27.06.2013