2016-08-02 94 views
1

Ich versuche normalize data und erkannte, dass es nicht funktioniert, weil ich das falsche Maximum bekomme. Der Nummernvergleich funktioniert jedoch nicht korrekt. Hier ist mein Code:Javascript vergleicht Zahlen funktioniert nicht

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

    } 
} 

Ich bin eine Menge Konsolenausgabe bekommen, aber hier ist ein Beispiel:

241590: 17.5799 no 9.86874 

was bedeutet, dass aus irgendeinem Grund, JS denkt, dass 17,5799 nicht größer als 9,86874. Warum passiert das und was kann ich tun, um es zu beheben? Vielen Dank!

EDIT 1: Beim Drucken Array [i] - Max, ich habe den richtigen Unterschied ... außer es ist negativ.

+0

(Hinweis: es ist besser, 'for (var i = 0' anstelle von' für (i = 0') zu verwenden. – gcampbell

+3

was ist der Inhalt des Arrays? – Cruiser

+0

Sie können max/min auch mit 'Math.min 'erhalten .apply (null, array) '. Siehe http://jsbin.com/somexiwopo/edit?js,console,output – NTL

Antwort

5

Es ist, weil Sie Array enthält Zeichenfolgen, nicht Zahlen.

so '9,95799'> '89 0,86874' => true :) mithilfe von Zahlen statt

+0

Vielen Dank! Würde parseFloat() funktionieren? –

+0

' parseFloat() 'es ist, ja – Luca

0

@Darkves ist richtig - Sie dieses Verhalten sehen, da das Array String anstelle von Zahlen enthält. Sie sollten daher die einzelnen Elemente des Arrays mit analysieren und dann die resultierenden Werte vergleichen. Hier ist ein Code-Snippet für die:

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

Ich hoffe, das etwas mehr Licht wirft.