Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / DecimalFormat - ограничить дробну часть / 11 сообщений из 11, страница 1 из 1
28.02.2007, 11:53:06
    #34360060
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DecimalFormat - ограничить дробну часть
есть код
Код: 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
28.02.2007, 12:45:03
    #34360282
Ruslan.Isbarov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DecimalFormat - ограничить дробну часть
Это же double? Т.е. число. Как Вы ограничите у него дробную часть? Не проще ли Вам округлять и ограничивать ее при выводе:

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

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


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


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

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


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

Тоже верно. Особенно если дело дойдет до тугриков.
...
Рейтинг: 0 / 0
28.02.2007, 14:18:41
    #34360701
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DecimalFormat - ограничить дробну часть
ЗашедшийА еще лучше 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
Форумы / Java [игнор отключен] [закрыт для гостей] / DecimalFormat - ограничить дробну часть / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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