#java #formatting #format #currency #number-formatting
Вопрос:
Например, в США 1000000 представлено как 1 000 000 (1 миллион), но в Индии оно представлено как 10 00 000 (10 лакхов). Для этого я испробовал несколько методов
double value = 1000000d;
NumberFormat numberFormatter = NumberFormat.getNumberInstance(new Locale("en", "IN"));
System.out.println(numberFormatter.format(value));
NumberFormat deci = new DecimalFormat("#,##,##,###.##");
System.out.println("Decimal Format " deci.format(value));
NumberFormat format = NumberFormat.getNumberInstance();
format.setCurrency(Currency.getInstance("INR"));
format.setMaximumFractionDigits(2);
System.out.println(format.format(value));
Но все эти методы дают результат в 1 000 000, но мне требуется формат 10 00 000. Что мне нужно здесь изменить?
Ответ №1:
Форматирование десятичных чисел Java не поддерживает группы Из Документов :
Разделитель групп обычно используется для обозначения тысяч, но в некоторых странах он разделяет десятки тысяч. Размер группировки-это постоянное количество цифр между символами группировки, например 3 для 100 000 000 или 4 для 1 000 000 000. Если вы предоставляете шаблон с несколькими символами группировки, используется интервал между последним и концом целого числа. Так что «#,##,###,####» == «######,####» == «##,####,####».
Для этого вам понадобится другая библиотека. Предлагаю следующее : http://site.icu-project.org/https://mvnrepository.com/artifact/com.ibm.icu/icu4j/69.1
double value = 1000000d;
NumberFormat numberFormatter = NumberFormat.getNumberInstance(new Locale("en", "IN"));
System.out.println(numberFormatter.format(value));
Выход :
10,00,000
Ответ №2:
public static String fmt(String s)
{
String formatted = "";
if(s.length() > 1){
formatted = s.substring(0,1);
s = s.substring(1);
}
while(s.length() > 3){
formatted = "," s.substring(0,2);
s = s.substring(2);
}
return formatted "," s ".00";
}