2013-08-28 72 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(...)' –