powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / DecimalFormat - ограничить дробну часть
11 сообщений из 11, страница 1 из 1
DecimalFormat - ограничить дробну часть
    #34360060
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
     private   static   class  GetterSum {
         private   final   static  String pattern             = "#0.00";
         private   final   static  Character decimalSeparator = '.';
         private   final   static  DecimalFormat df; 
         static  {
            DecimalFormatSymbols dfs =  new  DecimalFormatSymbols();
            dfs.setDecimalSeparator(decimalSeparator);
            df =  new  DecimalFormat(pattern, dfs);
            df.setMinimumFractionDigits( 2 );
            df.setMaximumFractionDigits( 2 );
        }
         public   static   synchronized   Double  getDouble(String value) {
             Double  result =  null ;
             try  {
                ParsePosition ps =  new  ParsePosition( 0 );
                result = df.parse(value, ps).doubleValue();
                 if  (ps.getErrorIndex() != - 1  || ps.getIndex() != value.length()) {
                    result =  null ;
                     throw   new  ParseException(value, ps.getIndex());
                }
            }  catch  (NullPointerException ex) {
                //Logger.getLogger(currPackage).error(ex);
                result =  null ;
            }  catch  (ParseException ex) {
                //Logger.getLogger(currPackage).error(ex);
                result =  null ;
            }
             return  result;
        }
.....
    }
а вот как ограничить дробную часть до 2 знаков?, т.е. если подсовываем строку "100.0123" то получаем ошибку?
...
Рейтинг: 0 / 0
DecimalFormat - ограничить дробну часть
    #34360282
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это же double? Т.е. число. Как Вы ограничите у него дробную часть? Не проще ли Вам округлять и ограничивать ее при выводе:

Код: plaintext
1.
2.
3.
4.
5.
NumberFormat formatter = NumberFormat.getNumberInstance();
formatter.setMaximumFractionDigits( 2 );
formatter.setMinimumFractionDigits( 2 );

String doubleValStr = formatter.format(doubleVal);
...
Рейтинг: 0 / 0
DecimalFormat - ограничить дробну часть
    #34360356
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не совсем корректно выразился. У полученного числа ограничивать ничего не надо.
А только вот строку "100.01" надо принимать, а строку "100.0123" - нет.
По условию надо принимать только числа с 2 фиксированными знаками после запятой, в качестве разделителя точка. Если разделитель не точка - это сделал (DecimalFormatSymbols),
а вот принимать числа с 2 фиксированными знаками после запятой - засада.
...
Рейтинг: 0 / 0
DecimalFormat - ограничить дробну часть
    #34360432
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Ponomarevя не совсем корректно выразился. У полученного числа ограничивать ничего не надо.
А только вот строку "100.01" надо принимать, а строку "100.0123" - нет.


Так может регэкспом переехать для валидации и не извращатся?
...
Рейтинг: 0 / 0
DecimalFormat - ограничить дробну часть
    #34360436
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос в догонку. Случайно не деньги расчитываем?
...
Рейтинг: 0 / 0
DecimalFormat - ограничить дробну часть
    #34360453
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz Michael Ponomarevя не совсем корректно выразился. У полученного числа ограничивать ничего не надо.
А только вот строку "100.01" надо принимать, а строку "100.0123" - нет.


Так может регэкспом переехать для валидации и не извращатся?
Так тут 2 зайца было; во-первых валидация, во-вторых перевод валидного в double
BlazkowiczВопрос в догонку. Случайно не деньги расчитываем?
рассчитываем - громко сказано, скорее принимаем и сохраняем в БД
...
Рейтинг: 0 / 0
DecimalFormat - ограничить дробну часть
    #34360546
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Ponomarev BlazkowiczВопрос в догонку. Случайно не деньги расчитываем?
рассчитываем - громко сказано, скорее принимаем и сохраняем в БД

Ну, кто же для рассчета денег Double использует? Или вас не волнует что там потенциально копеечки теряются? int, только int. И только в копейках. Парсинг вероятно свой придется делать. Хотя может и есть какие-то наработки в этой области, я не сталкивался.
...
Рейтинг: 0 / 0
DecimalFormat - ограничить дробну часть
    #34360568
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz Michael Ponomarevя не совсем корректно выразился. У полученного числа ограничивать ничего не надо.
А только вот строку "100.01" надо принимать, а строку "100.0123" - нет.


Так может регэкспом переехать для валидации и не извращатся?
+1
А еще лучше NumberFormatter. Кстати, тема - боян. тынц
...
Рейтинг: 0 / 0
DecimalFormat - ограничить дробну часть
    #34360593
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНу, кто же для рассчета денег Double использует? Или вас не волнует что там потенциально копеечки теряются? int, только int. И только в копейках. Парсинг вероятно свой придется делать. Хотя может и есть какие-то наработки в этой области, я не сталкивался.
Какой такой int в копейках??? Ни в коем случае такого делать нельзя ни-ко-гда! Можно еще понять - long, но int ограничит макс.сумму 21 миллионом рублей, что мало даже по меркам захудалого "УстьПердюйскПромСтройСнабБанка". К тому же очень некрасиво пользоваться подпорками при наличии стандартного средства BigDecimal.
...
Рейтинг: 0 / 0
DecimalFormat - ограничить дробну часть
    #34360699
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗашедшийНи в коем случае такого делать нельзя ни-ко-гда! Можно еще понять - long, но int ограничит макс.сумму 21 миллионом рублей, что мало даже по меркам захудалого "УстьПердюйскПромСтройСнабБанка".

Тоже верно. Особенно если дело дойдет до тугриков.
...
Рейтинг: 0 / 0
DecimalFormat - ограничить дробну часть
    #34360701
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗашедшийА еще лучше NumberFormatter. Кстати, тема - боян. тынц
если внимательно прочесть исходное сообщение, то можно увидеть там
Код: plaintext
\n                 if  (ps.getErrorIndex() != - 1  || ps.getIndex() != value.length()) {\n                    result =  null ;\n                     throw   new  ParseException(value, ps.getIndex());\n                }\n
и это не спасает, так что не боян :)

по поводу NumberFormatter - у меня не swing, значение приходит по http протоколу POST запросом.(не из веб-морды)

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


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