0

我有 2 个大变量,我需要比较:

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

在我所有的测试比较中得到错误的结果。例如:

  1. 将 var b 转换为整数

    var a = 150000000000000000000000001
    变量 b = 15000000000000000000000000
    a > b // 返回 false 并且是错误的
    
  2. 将 var a 转换为字符串

    var a = "15000000000000000000000001"
    var b = "150000000000000000000000000"
    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

我认为这里的标准做法是从另一个数字中减去一个数字并将其与一个 epsilon 值进行比较。

于 2013-06-27T05:45:00.907 回答