2016-01-08 6 views
1

Я пытаюсь получить int, который всегда является числом с 2 десятичными знаками. Ед.:Создание десятичного числа без десятичного разделителя

  • 1000 - 10,00 (мой разделитель десятичной запятой - запятая).
  • 100 является 1,00
  • 0 0,00
  • 100099 является 1.000,99

Так что я пытаюсь избегать использования Строковых операторов и использовать DecimalFormat с рисунком 0,00 и немецкий язык.

Но когда я получаю 10004, вывод, что я получаю это 1.00.04

Это мой код:

public static String formatDecimal(double number) { 
    //String pattern = "#,00"; 
    String pattern = "0,00"; 
    DecimalFormat fN = (DecimalFormat) NumberFormat.getNumberInstance(Locale.GERMAN); 
    fN.applyPattern(pattern); 

    return fN.format(number) 
} 
+0

почему бы вам не попробовать '(с плавающей точкой) переменной/100'? – Saidolim

+0

Я не думаю, что вы можете сжать символ десятичного разделителя до двух последних символов. Я бы не использовал арифметику с плавающей запятой из-за проблем округления. Используйте BigDecimal или 'intPart = number/100;' и 'fracPart = число% 100' и ​​печатайте их как два целых числа, разделенных точкой с запятой. – aioobe

+0

Да, я пробовал это уже ... точка в том, что мне нужен десятичный и тысячный разделитель ... и ваши советы имеют другое поведение, когда данные имеют одну цифру или больше (потому что я реферат непосредственно как NUMBER из базы данных .. .когда 0, я должен показать 0,00 (1 - 1,00 - 99 - 0,99 - 123 - 1,23), а цифры, такие как 123456, - ​​1,234,56 ... –

ответ

2

Почему бы вам использовать свой собственный шаблон? Реализация Java по умолчанию имеет довольно хорошие шаблоны в большинстве локаций. По крайней мере, глядя Oracle's docs он выглядит, что он должен делать то, что вам необходимо:

Locale     Formatted Numbers 
German (Germany)  123.456,789 
German (Switzerland) 123'456.789 
English (United States) 123,456.789 

Так что вы должны сделать (помимо деления числа на 100) устанавливаются минимальная дробная цифра на «2»:

public static String formatDecimal(double number) { 
    NumberFormat german = NumberFormat.getNumberInstance(Locale.GERMAN); 
    german.setMinimumFractionDigits(2); 
    return german.format(number/100); 
} 

Отредактировано: печатает цифры, как и ожидалось:

0,00 
0,01 
0,02 
0,09 
0,10 
0,11 
0,99 
1,00 
1,01 
9,99 
10,00 
10,01 
99,99 
100,00 
100,01 
999,99 
1.000,00 
1.000,01 
9.999,99 
10.000,00 
10.000,01 
99.999,99 
100.000,00 
100.000,01 
999.999,99 
1.000.000,00 
1.000.000,01 
+0

Это сработало для меня ... большое спасибо @Zilvinas ... –

2

Try:

public static String formatDecimal(double number) { 
    DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(Locale.GERMANY); 
    dfs.setGroupingSeparator('.'); 
    return new DecimalFormat("0,00", dfs).format(number/100); 
} 

formatDecimal(1000); // 10,00 
formatDecimal(100); // 1,00 
formatDecimal(0);  // 0,00 
formatDecimal(100099); // 1.000,99 
+0

100099 - 1.000,99 .. Это то, что он просит? Что это значит? –

+0

@PritamBanerjee, OP предположительно работает с валютой и представляет цены в центах с использованием целых чисел. (S), тогда он хочет отобразить их как полные евро (или доллары или что-то еще). – aioobe

+0

Но десятичное после 1, а затем co ММА. Как может быть такая валюта? 1,00,34 не имеет никакого смысла. –

Смежные вопросы