Информация об изменениях

Сообщение Re[4]: Расстояние между группами цифр при вводе/выводе чисел от 20.01.2022 13:33

Изменено 20.01.2022 13:54 Shtole

Re[4]: Расстояние между группами цифр при вводе/выводе чисел
Здравствуйте, Sinclair, Вы писали:

S>>Ну, то есть подменять текст. Я это назвал «через редактирование самой строки». Нет ли иных способов?

S>Отказаться от редактирования строки, научиться мыслить в терминах "преобразование числа в строку в соответствии с определёнными культурными предпочтениями и техническими особенностями".
S>Когда число уже преобразовано в строку, оборудовать его культурой поздно.

…редактируется…
Re[4]: Расстояние между группами цифр при вводе/выводе чисел
Здравствуйте, Sinclair, Вы писали:

S>>Ну, то есть подменять текст. Я это назвал «через редактирование самой строки». Нет ли иных способов?

S>Отказаться от редактирования строки, научиться мыслить в терминах "преобразование числа в строку в соответствии с определёнными культурными предпочтениями и техническими особенностями".
S>Когда число уже преобразовано в строку, оборудовать его культурой поздно.

Очень глубокий ответ, очень. Но я его не понял.

Вот у нас поле ввода.

Вот юзер хочет ввести число: 1 000 000 001 (или 1 000 000 002). Он жмакает по цифровой клавиатуре и видит: 10000000001.

Вот юзер, конечно, думает: а не нажал ли я лишнего? И начинает считать нули, выделяя текст/расставляя группы пробелами, которые потом стирает/водя грязным ногтём по экрану/иным способом в рамках фантазии.

Это проблема. Юзер должен сразу видеть, что он вводит.

Как выглядит решение «в терминах "преобразование числа в строку в соответствии с определёнными культурными предпочтениями и техническими особенностями"»?

А чтобы стало веселее, я пошёл домой за ружьём представим себе, что это поле ввода калькулятора, куда вводятся выражения:

1 000 000 001 + 1
1 000 000 001 / pi
sin(1 000 000 001)


Как видите, в этом юз-кейсе:

1. Проблема стоит особенно остро (в львиной доле случаев вводятся числа, иногда большие);
2. Мы не можем ограничиться вводом символов, составляющих число и не можем просто взять специальный контрол «поле ввода числа»;
3. Вставка пробелов и прочих разделителей чревата конфликтами с грамматикой языка.

Что касается «культурных предпочтений». Идеально было бы брать «разделитель групп» из настроек операционной системы. Но, например, браузер вам этого не даст (ибо отпечатки). Браузер даст только: а) название култур-мултур, б) интерфейс, который отформатирует число в соответствии с этой культурой. То есть, как ни настраивай юзер операционную систему, браузер всё равно сведёт всё к наибольшему общему делителю данной культуры (что сильно обесценивает саму идею).

Вывод напрашивается такой: ну и к чёрту эти культурные особенности, это тот случай, когда должна работать глобализация. То есть, пусть у нас всегда группы разделяются расстоянием, ну, максимум, с учётом LTR/RTL.

Если я не прав, то как надо? Это первый вопрос.

Второй: ну, допустим, я прав. Как это реализовать? Естественно, в голову приходят лигатуры, как образец готового решения. Логику можно упихать в шрифт, типа «три цифры слева и три цифры справа — увеличиваем кернинг». Решение хорошо тем, что будет работать везде, и в HTML, и в Qt, и в Скайтере. Но это же надо как-то шрифт на лету подменять.