2013-08-28 75 views
19

我有浮點數字數組:排序浮點數字陣列

[ 82.11742562118049, 28.86823689842918, 49.61295450928224, 5.861613903793295 ] 

運行的sort()陣列上後,我得到這個:

[ 28.86823689842918, 49.61295450928224, 5.861613903793295, 82.11742562118049 ] 

注意如何... 5.8對於JavaScript(節點),大於49.6 ...。這是爲什麼?

我該如何正確排序這些數字?

+1

使用'arr.sort(function(a,b){return a-b;});'。按照現狀,這些值將按字母順序排序。 「2」位於「4」之前,位於「8」之前的「5」之前(比較是每個數字的第一個「字母」......直到它們匹配,然後比較下一個字母,所以上) – Ian

+1

供參考:http://www.w3schools.com/jsref/jsref_sort.asp。默認情況下,javascript的數組排序方法按字母順序排序並升序排列。因此,爲什麼你通過@Ian提供的排序方法 –

+0

一般來說,不要參考W3學校,因爲他們可能是不正確的廣泛的事情。 – jtromans

回答

30

通行證在一個排序函數:

[….].sort(function(a,b) { return a - b;}); 

結果:

[5.861613903793295, 28.86823689842918, 49.61295450928224, 82.11742562118049] 

From MDN

如果未提供的compareFunction,元件通過它們轉換爲字符串,並比較排序字典中的字符串(「字典」或「電話簿」,而不是數字)順序。

+0

括號不匹配。 – zsong

+1

@CrazyTrain - 感謝您的編輯。以爲我是在那裏失明:) – dc5

+0

謝謝@ dc5 !!!!! – sustainablepace

2

內置的JS排序函數將所有內容視爲字符串。嘗試製作自己的:

var numbers = new Array (82.11742562118049, 28.86823689842918, 49.61295450928224, 5.861613903793295); 

function sortFloat(a,b) { return a - b; } 

numbers.sort(sortFloat); 
+1

您應該使用數組字面值。 '[...]',而不是'new Array(...)' –