powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Полные непонятки с NumberFormatter
11 сообщений из 11, страница 1 из 1
Полные непонятки с NumberFormatter
    #34251186
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Раньше я считал, что 3w0 - это не число.
Но вот сегодня меня javax.swing.text.NumberFormatter пытается убедить в
обратном:

import javax.swing.text.NumberFormatter();
....
( new NumberFormatter()).stringToValue( "3w0" ) - получается число 3.

Как мне объяснить NumberFormatter'у (или DecimalFormat'у), что я не хочу
принимать от пользователей ничего, кроме числа с возможной дробной
частью если маска "########0.00"?

--
Алексей
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Полные непонятки с NumberFormatter
    #34251270
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему не Integer.parseInt()?
...
Рейтинг: 0 / 0
Полные непонятки с NumberFormatter
    #34251274
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Double.parseDouble() извиняюсь
...
Рейтинг: 0 / 0
Полные непонятки с NumberFormatter
    #34251319
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LINUXER wrote:

> Double.parseDouble() извиняюсь

Потому что это
new JFormattedTextField( new NumberFormatter(
new DecimalFormat( "########0.00" )))
....и его поведение мне не нравится, а то, что показал- это так, для примера.

--
Алексей
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Полные непонятки с NumberFormatter
    #34251320
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 GKS_Samara:
Используй ParsePosition дополнительно. Он хранит в себе информацию об ошибках при распарсивании.
Типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
     public   static   Double  parseDouble(String value)  throws  NumberFormatException {
         return  parseDouble(value, Locale.getDefault());
    }

     public   static   Double  parseDouble(String value, Locale locale)  throws  NumberFormatException {
        ParsePosition pp =  new  ParsePosition( 0 );
        Number n = NumberFormat.getNumberInstance(locale).parse(value, pp);
         if  (pp.getErrorIndex() != - 1 ) {
             throw   new  NumberFormatException(
                    MessageFormat.format("Specified value \"{0}\" is not formatted well. Error index is {1}.", value, pp.getErrorIndex()));
        }
         else  {
             return  n.doubleValue();
        }
    }
2LINUXER: потому что локали бывают разные выставлены, а парсить нужно обычно всегда один и тот же формат числа. Независимо от того, какой сейчас в системе десятичный разделитель - запятая, точка или другая крокозяба.
...
Рейтинг: 0 / 0
Полные непонятки с NumberFormatter
    #34251349
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чуток по-другому... проверять, что было распарсено все число надо, а не код ошибки:
Код: plaintext
1.
2.
3.
4.
5.
...
         if  (pp.getIndex() != value.length()) {
             throw   new  NumberFormatException(
                    MessageFormat.format("Specified value \"{0}\" is not formatted well. Error index is {1}.", value, pp.getIndex()));
...
...
Рейтинг: 0 / 0
Полные непонятки с NumberFormatter
    #34251368
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Текущий индекс, на котором стоим - и есть тот символ, на котором форматтер споткнулся и не смог его попарсить...
З.Ы. И кроме того ParsePosition можно юзать для того, чтобы парсить число не сначала.
...
Рейтинг: 0 / 0
Полные непонятки с NumberFormatter
    #34251397
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зашедший wrote:

> Используй ParsePosition дополнительно. Он хранит в себе информацию об
> ошибках при распарсивании.

Только при использовании JFormattedTextField добраться до ParsePosition
непросто- пришлось определять своего наследника DecimalFormat и
переопределять parseObject(String source), который зовётся в поле.

> *if* (pp.getErrorIndex() != -*1*) {

Ха! Если передать строку 3w0, то getErrorIndex()==-1,
зато pos.getIndex()==1, что и даёт ключ для поиска ошибки:
pos.getIndex() < source.length() :)

--
Алексей
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Полные непонятки с NumberFormatter
    #34251440
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_Samara
Зашедший wrote:

> Используй ParsePosition дополнительно. Он хранит в себе информацию об
> ошибках при распарсивании.

Только при использовании JFormattedTextField добраться до ParsePosition
непросто- пришлось определять своего наследника DecimalFormat и
переопределять parseObject(String source), который зовётся в поле.

> *if* (pp.getErrorIndex() != -*1*) {

Ха! Если передать строку 3w0, то getErrorIndex()==-1,
зато pos.getIndex()==1, что и даёт ключ для поиска ошибки:
pos.getIndex() < source.length() :)

--
Алексей
Posted via ActualForum NNTP Server 1.3
Уже все отписал :) Давно не пользовался, так что деталь насчет getIndex() вспомнил не сразу...
...
Рейтинг: 0 / 0
Полные непонятки с NumberFormatter
    #34251466
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зашедший wrote:

> Уже все отписал :) Давно не пользовался, так что деталь насчет
> getIndex() вспомнил не сразу...

Да, спасибо, главное понять где копать.
Тема закрыта с полной победой :)

--
Алексей
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Полные непонятки с NumberFormatter
    #34251853
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_Samara
Тема закрыта с полной победой :)

Иногда даже этот форум бывает полезен. Особенно когда не начинают очередную религиозную войну типа "Эксель против Аутлука" :)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Полные непонятки с NumberFormatter
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]