Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / DecimalFormat - непонятные результаты / 7 сообщений из 7, страница 1 из 1
05.11.2020, 19:28
    #40015691
shalamyansky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DecimalFormat - непонятные результаты
Пытаюсь использовать класс java.text.DecimalFormat , и накак не могу понять логику вот такой его работы:

Код: java
1.
String result = ( new DecimalFormat( pattern ) ).format( number );


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
    number      pattern    result       comment    expected

1   123.456     #          123,456      ok

2   123.456     #.#        123,456      ok

3   123.456     0.0        123,5        ok

4   123.456     #.0        123,456      why?       123,5

5   123.456     0.#        123,         why?       123,456

6   123.456     abc0.0     abc123,5     ok

7   123.456     abc#       abc123       why?       abc123,456

8   123.456     abc#.#     abc123       why?!      abc123,456

9   123.456     abc        abc123       why?!      abc

10  123.456     (empty)    123,456      why?!      (empty string)



Возможно она существует, эта логика, но я её никак понять не могу. Буду благодарен за ваши объяснения.

Java 1.8
...
Рейтинг: 0 / 0
05.11.2020, 20:28
    #40015724
shalamyansky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DecimalFormat - непонятные результаты
Прошу простить, оказывается, у меня при передаче параметра через URL пропадал символ #. Кое-какие результаты "исправились", но далеко не все:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
    number      pattern    result       comment    expected

1   123.456     #          123,456      ok

2   123.456     #.#        123,456      ok

3   123.456     0.0        123,5        ok

4   123.456     #.0        123,5        ok

5   123.456     0.#        123,5        why?       123,456

6   123.456     abc0.0     abc123,5     ok

7   123.456     abc#       abc123       why?       abc123,456

8   123.456     abc#.#     abc123,5     why?!      abc123,456

9   123.456     abc        abc123       why?!      abc

10  123.456     (empty)    123,456      why?!      (empty string)
...
Рейтинг: 0 / 0
05.11.2020, 21:05
    #40015733
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DecimalFormat - непонятные результаты
Вот эти пять вопросительных знаков что ты поставил. Ты можешь прокомментировать что там вызвало удивление?

Из непоняток у тебя может быть только режим округления.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/RoundingMode.html

Всё остальное - вроде-бы понятно.
...
Рейтинг: 0 / 0
05.11.2020, 21:48
    #40015744
shalamyansky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DecimalFormat - непонятные результаты
В столбике expected я написал, что ожидал получить в соответствии с описанием. А result иной. Хорошо, раскрою подробее.

Код: sql
1.
2.
3.
4.
5.
    number      pattern    result

2   123.456     #.#        123,456

5   123.456     0.#        123,5


(2,5). Почему в случае (2) выводятся 3 цифры после запятой, а в случае (5) - только одна? Хотя в обоих случаях за дробную часть отвечает один и тот же подпаттерн ".#".

Код: sql
1.
8   123.456     abc#.#     abc123


8. Почему здесь не выведена дробная часть?

Код: sql
1.
9   123.456     abc        abc123


9. Почему здесь выведены цифры 123, хотя в паттерне вообще нет ни "#", ни "0", только префикс (или суффикс) "abc"? Ожидалась на выходе только сама строка "abc".

Код: sql
1.
10  123.456     (empty)    123,456


10.Почему тут вообще что-то выведено? Пустой паттерн - пустой результат, не?

К округлению вопросов нет.
...
Рейтинг: 0 / 0
05.11.2020, 22:01
    #40015750
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DecimalFormat - непонятные результаты
Я на этот вопрос вряд-ли отвечу. Не копал эту теорию настолько дотошно. Да и кто из джавистов копал? ХЗ.

Посмотри в исходники OpenJDK.

https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/text/DecimalFormat.java

Там всё - прозрачно. После конструктора вызывается метод void applyPattern(String pattern, boolean localized)
и он делает все что надо по настройке форматирования.

Попробуй скопировать в отдельный класс с другим именем и стань отладчиком. Понаблюдай.
...
Рейтинг: 0 / 0
05.11.2020, 22:07
    #40015752
shalamyansky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DecimalFormat - непонятные результаты
Сорри, сорри, запутался в своих вызовах. Похоже в большинстве случаев все в порядке. Остаются только случаи

Код: sql
1.
9   123.456     abc        abc123


9. Почему здесь выведены цифры 123, хотя в паттерне вообще нет ни "#", ни "0", только префикс (или суффикс) "abc"? Ожидалась на выходе только сама строка "abc".

Код: sql
1.
10  123.456     (empty)    123,456


10.Почему тут вообще что-то выведено? Пустой паттерн - пустой результат, не?

Прошу прощения за введение в заблуждение и отнятое время, если кто проверять стал.
...
Рейтинг: 0 / 0
05.11.2020, 22:14
    #40015754
shalamyansky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DecimalFormat - непонятные результаты
mayton

Попробуй скопировать в отдельный класс с другим именем и стань отладчиком. Понаблюдай.


Тогда уж свой класс и оставить, и в нем все, как желаемо, и делать. Я, собственно, и стартовал, чтобы свой форматтер сделать,
а DecimalFormat взять как основу, чтобы на него возложить простые случаи. Но он повел себя немного станно, с моей точки зрения. Хотя, как оказалось, большинство странностей объяснилось моей неаккуратностью.

Спасибо!
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / DecimalFormat - непонятные результаты / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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