2013-08-28 5 views
19

У меня есть массив чисел точек с плавающей точкой:Сортировка массива чисел с плавающей точкой точечных

[ 82.11742562118049, 28.86823689842918, 49.61295450928224, 5.861613903793295 ] 

После запуска своего рода() на массив, я получаю это:

[ 28.86823689842918, 49.61295450928224, 5.861613903793295, 82.11742562118049 ] 

Обратите внимание, как 5.8 ... больше, чем 49,6 ... для JavaScript (Node). Почему это?

Как правильно сортировать эти цифры?

+1

Используйте 'arr.sort (function (a, b) {return a-b;});'. Как бы то ни было, значения сортируются по алфавиту. «2» предшествует «4», которое предшествует «5», которое предшествует «8» (сравнение - это первая «буква» каждого номера ... пока они не совпадут, тогда она сравнивает следующую букву, и поэтому on) – Ian

+1

Для справки: http://www.w3schools.com/jsref/jsref_sort.asp. По умолчанию метод сортировки массива javascript сортируется по алфавиту и по возрастанию. Следовательно, почему вы передаете метод сортировки, предоставленный @Ian –

+0

Как правило, не ссылайтесь на школы w3, поскольку они могут быть неправильными для широкого круга вещей. – jtromans

ответ

30

Pass в функции сортировки:

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

результаты:

[5.861613903793295, 28.86823689842918, 49.61295450928224, 82.11742562118049] 

From MDN:

Если compareFunction не входит в комплект, элементы сортируются, преобразуя их в строки и сравнения строки в лексикографическом («словарь» или «телефонная книга», а не численный) порядок.

+0

скобки не совпадают. – zsong

+1

@CrazyTrain - спасибо за редактирование. думал, что я буду слепым там :) – dc5

+0

thanks @ 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 (...)' –

Смежные вопросы