Подтвердить что ты не робот

Сортировка массива чисел с плавающей точкой

У меня есть массив чисел с плавающей запятой:

[ 82.11742562118049, 28.86823689842918, 49.61295450928224, 5.861613903793295 ]

После запуска sort() в массиве я получаю следующее:

[ 28.86823689842918, 49.61295450928224, 5.861613903793295, 82.11742562118049 ]

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

Как правильно отсортировать эти числа?

4b9b3361

Ответ 1

Перейдите в функцию сортировки:

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

результаты:

[5.861613903793295, 28.86823689842918, 49.61295450928224, 82.11742562118049] 

Из MDN:

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

Ответ 2

Встроенная функция сортировки JS рассматривает все как строки. Попробуйте сами:

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

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

numbers.sort(sortFloat);