Сортировка массива чисел с плавающей точкой
У меня есть массив чисел с плавающей запятой:
[ 82.11742562118049, 28.86823689842918, 49.61295450928224, 5.861613903793295 ]
После запуска sort() в массиве я получаю следующее:
[ 28.86823689842918, 49.61295450928224, 5.861613903793295, 82.11742562118049 ]
Обратите внимание, как 5.8... больше, чем 49.6... для JavaScript (Node). Почему это?
Как правильно отсортировать эти числа?
Ответы
Ответ 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);