【问题标题】:Javascript comparing numbers isn't working比较数字的Javascript不起作用
【发布时间】:2016-08-02 13:16:28
【问题描述】:

我正在尝试normalize data 并意识到它不起作用,因为我得到的最大值不正确。但是,数字的比较无法正常工作。这是我的代码:

var max = Number.MIN_VALUE;
var min = Number.MAX_VALUE;
for (i = 0; i < array.length; i++) 
{ 
    if(array[i]>max)
    {
        max = array[i];
    }
}

for (i = 0; i < array.length; i++) 
{ 
    if(array[i]<min)
    {
        min = array[i];
    }
}

console.log("max: " + max);
console.log("min: " + min);

for (i = 0; i < array.length; i++)
{
    if(array[i]!=0)
    {   
            if(array[i]>max)
            {
               console.log(i+": " + array[i] + " yes");
            }
            else
            {
               console.log(i+": " + array[i] + " no " + max);
            }

    }
}

我得到了很多控制台输出,但这里有一个例子:

241590: 17.5799 no 9.86874

意思是由于某种原因,JS 认为 17.5799 不大于 9.86874。为什么会发生这种情况,我能做些什么来解决它?谢谢!

编辑 1:当打印 array[i] - max 时,我得到了正确的差异......除了它是负数。

【问题讨论】:

标签: javascript floating-point max


【解决方案1】:

这是因为您的数组包含字符串,而不是数字。

所以 '9.95799' > '89.86874' => 真的 :) 改用数字

【讨论】:

  • parseFloat() 是的,是的
【解决方案2】:

@Darkves 是正确的 - 您看到这种行为是因为数组包含字符串而不是数字。因此,您应该使用 parseFloat 解析数组的各个项目,然后比较结果值。 这是一个代码sn-p:

for (var i = 0; i < array.length; i++)
{
    if(parseFloat(array[i])!=0)
    {   
            if(parseFloat(array[i])>max)
            {
               console.log(i+": " + array[i] + " yes");
            }
            else
            {
               console.log(i+": " + array[i] + " no " + max);
            }
    }
}

我希望这能带来更多启示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 2011-09-20
    • 2021-03-02
    相关资源
    最近更新 更多