浮点-Javascript比较数字是't工作

floating point - Javascript comparing numbers isn't working

本文关键字:工作 -Javascript 比较 数字 浮点      更新时间:2023-09-26

我正在尝试规范化数据,并意识到它不起作用,因为我得到了不正确的最大值。然而,数字的比较并不正确。这是我的代码:

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时,我得到了正确的差异。。。除了它是阴性的。

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

所以'9.95799'>'89.86874'=>真:)使用数字代替

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

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);
            }
    }
}

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