Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   10000 => 10 000 (https://javascript.ru/forum/extjs/67149-10000-%3D-10-000-a.html)

potkin 31.01.2017 11:57

10000 => 10 000
 
Вопрос по "большим" числам.
Надо разделить пробелами большие числа.
Например:
число 10000 (десять тысяч) надо показать в таком виде: 10 000.
число 1000000 => 1 000 000
...
Если ли такая возможность в ExtJS?

Vlasenko Fedor 31.01.2017 12:14

При сравнивании, вы сравниваете число 10000 с строкой 10 000
function reFormat(num){
	return ('' + num).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1 ')
}

alert(reFormat(10000));
alert(reFormat(1000000));

potkin 31.01.2017 12:30

А так что бы оставалось числом - никак?

Vlasenko Fedor 31.01.2017 12:47

Цитата:

Сообщение от potkin
А так что бы оставалось числом - никак?

В школу в 1 класс, чтоб учитель вбил в голову, что такое числа и как пишутся
Жесть, как-же вы еще за программирование беретесь, если не понимаете, что такое число и как оно пишется

potkin 31.01.2017 12:58

Цитата:

Сообщение от Poznakomlus (Сообщение 442791)
В школу в 1 класс, чтоб учитель вбил в голову, что такое числа и как пишутся
Жесть, как-же вы еще за программирование беретесь, если не понимаете, что такое число и как оно пишется

Poznakomlus - У меня много приложений на WinForms.
В WinForms есть такая возможность, вшита в виджеты (контролы, компоненты). То есть, разделять число. И софтина видет это не как текст, а именно как число.
Сейчас переписываю WinForm-приложения в WebForm. Большую часть уже переписал.
Заказчик требует отображение числа в понятном ему формате, в данном случае с пробелами, у конкурентов такой формат отображения есть (у них тоже Web-сервисы: Ангуляр 1).
Вот, я подумал, что ExtJS такой крутой и дорогой, может и у него есть такое "готовое" решение.
Ну и вопрос в том, что раз я задал вопрос - значит не смог его решить и может кто сталкивался и знает как решить данную проблему.

П.С.
"как-же вы еще за программирование беретесь"?
:-) :-) :-)

П.С.2.
Гуглом пользоваться умею:
js Разделение разрядов числа пробелами

Меня интересует ExtJS.

kolka 31.01.2017 14:36

Docs
Ext.util.Format.decimalSeparator = '.';
Ext.util.Format.thousandSeparator = ' ';
Ext.util.Format.numberRenderer('0.000');


Ext.util.Format.number(123456, '0,0.00')
выводит
"123 456.00"

potkin 31.01.2017 15:59

А можно это как-то применить для: textfield или numberfield?

nohuhu 03.02.2017 00:15

Посмотрел в код, боюсь что нет. :(

kolka 03.02.2017 11:45

renderTpl - ?

nohuhu 04.02.2017 04:45

renderTpl ничем не поможет, это шаблон для создания разметки HTML, из которой потом получаются элементы DOM для поля. Тут проблема в другом: <input> элементы используются напрямую и вы редактируете то, что видите. Если бы <input type="number"> был чуть поумнее, то в общем можно было бы просто его использовать и забыть о проблеме, но к сожалению, толку от этого элемента на данный момент весьма мало.

Один из вариантов решения проблемы - при каждом изменении значения в поле ввода парсить текст, валидировать и выводить обратно в заданном формате. Это можно было бы сделать, если бы не запутанные потроха Ext.form.field.Base и Ext.form.field.Field, которые подобные штуки делать могут, но со скрипом. Плюс юзеры несколько теряются, когда в поле ввода появляются символы, которые они не вводили (разделители), или наоборот исчезают там, где вроде только что нажал кнопку.

Другой вариант - разделить редактирование и отображение. Скажем, сделать <input> прозрачным и подсунуть под него <div> с выводом значения. В таком случае проблема с валидированием ввода сводится к банальному выкусыванию ненужных символов, а форматировать можно уже как угодно - ввод и вывод разделены.

Но в таком случае вылезают проблемы с выделением текста. :(

В общем, как ни крути - браузеры это хлам. :(


Часовой пояс GMT +3, время: 12:10.