0

2 つの大きな変数があり、次のように比較する必要があります。

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

私のすべてのテスト比較で、間違った結果が得られます。例えば:

  1. 変数 b を整数に変換します

    変数 a = 1500000000000000000000001
    変数 b = 1500000000000000000000000
    a > b // false を返し、間違っています
    
  2. var a を文字列に変換します

    var a = "150000000000000000000001"
    var b = "1500000000000000000000000"
    a > b // true を返し、間違っている
    

私の解決策:

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

私の質問は、見つかった解決策が正しいものなのか、それとも将来的に問題が発生するのかということです。

4

1 に答える 1

1

ここで私が信じている標準的な方法は、ある数値から別の数値を引き、それをイプシロン値と比較することです。

于 2013-06-27T05:45:00.907 に答える