Оригинал взят у
_winnie в
numbers sort, lexicographic orderЛексикографическая("алфавитная") сортировка чисел расставляет их в неправильном порядке:
1000000
20
21
3
3.14159
4
Миллион стоит перед 20 потому что первая цифра 1 меньше 2.
Что бы лексикографическая сортировка для строковых представлений положительных чисел была правильной, можно дописать перед числом достаточно много нулей, напр. 20 нулей (коллега расказал про хак: использовать пробелы вместо нулей).
00000000000000000003
00000000000000000003.14159
00000000000000000004
00000000000000000020
00000000000000000021
00000000000001000000
Придумал ещё способ. Для сохранения зрения и места в файлах - дописать перед числом количество цифр в нем, а не нули. Двумя цифрами, 01, 02, 03, .. 99. Числа с 10-ю цифрами иногда попадаются в измерениях (миллиарды), а с сотней - уже нет.
01|3
01|3.14159
01|4
02|20
02|21
07|1000000
Можно заменить на букву, от а до z, ещё более сжато получается:
b 3
b 3.14159
b 4
c 20
c 21
h 1000000
Ну и оставить от второго числа
только нужные значащие цифры, напр. 3.
b3
b314
b4
c2
c21
h1
Что бы не слишком сильно шокировать окружающих, можно писать в виде, похожем на стандартный экспоненциальный:
e06*1.0
e00*3.14