Как я могу форматировать номер строки, чтобы иметь запятые и круглые?
Каков наилучший способ форматирования следующего числа, которое присваивается мне как String?
String number = "1000500000.574" //assume my value will always be a String
Я хочу, чтобы это была строка со значением: 1,000,500,000.57
Как я могу отформатировать его как таковой?
Ответы
Ответ 1
Возможно, вы захотите посмотреть класс DecimalFormat
; он поддерживает разные локали (например: в некоторых странах, которые будут отформатированы как 1.000.500.000,57
).
Вам также нужно преобразовать эту строку в число, это можно сделать с помощью:
double amount = Double.parseDouble(number);
Пример кода:
String number = "1000500000.574";
double amount = Double.parseDouble(number);
DecimalFormat formatter = new DecimalFormat("#,###.00");
System.out.println(formatter.format(amount));
Ответ 2
Как только вы преобразуете свою строку в число, вы можете использовать
// format the number for the default locale
NumberFormat.getInstance().format(num)
или
// format the number for a particular locale
NumberFormat.getInstance(locale).format(num)
Ответ 3
Это также можно выполнить с помощью String.format(), который может быть проще и/или более гибким, если вы форматируете несколько номеров в одной строке.
String number = "1000500000.574";
Double numParsed = Double.parseDouble(number);
System.out.println(String.format("The input number is: %,.2f", numParsed));
// Or
String numString = String.format("%,.2f", numParsed);
Для строки формата "%. 2f" - "," означает отдельные цифровые группы с запятыми, а ".2" означает округление до двух мест после десятичной.
Подробнее о других параметрах форматирования см. https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
Ответ 4
Я создал свою собственную утилиту форматирования. Это очень быстро при обработке форматирования наряду с предоставлением вам многих функций:)
Он поддерживает:
- Форматирование запятой, например. 1234567 - 1,234,567.
- Префикс "Тысяча (K), Миллион (M), Миллиард (B), Trillion (T)".
- Точность от 0 до 15.
- Прецизионный повторный размер (означает, что если вы хотите иметь 6-значную точность, но имеете только 3 доступных цифры, это заставляет его 3).
- Снижение префикса (означает, что префикс, который вы выбираете, слишком велик, он снижает его до более подходящего префикса).
Код можно найти здесь. Вы называете это следующим образом:
public static void main(String[])
{
int settings = ValueFormat.COMMAS | ValueFormat.PRECISION(2) | ValueFormat.MILLIONS;
String formatted = ValueFormat.format(1234567, settings);
}
Я также должен указать, что это не поддерживает десятичную поддержку, но очень полезно для целочисленных значений. В приведенном выше примере в качестве вывода будет отображаться "1.23M". Возможно, я мог бы добавить десятичную поддержку, но не видел слишком много пользы для нее, так как тогда я мог бы объединить это в класс типа BigInteger, который обрабатывает сжатые массивы char [] для математических вычислений.
Ответ 5
public void convert(int s)
{
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(s));
}
public static void main(String args[])
{
LocalEx n=new LocalEx();
n.convert(10000);
}
Ответ 6
вы также можете использовать ниже решение -
public static String getRoundOffValue(double value){
DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
return df.format(value);
}
Ответ 7
Вы можете сделать все преобразование в одной строке, используя следующий код:
String number = "1000500000.574";
String convertedString = new DecimalFormat("#,###.##").format(Double.parseDouble(number));
Последние два символа # в конструкторе DecimalFormat также могут быть 0s. В любом случае работает.
Ответ 8
Первый ответ работает очень хорошо, но для ZERO/0 он будет отформатировать как .00
Следовательно, формат #, ## 0.00 работает для меня хорошо.
Всегда проверяйте разные номера, например 0/100/2334.30, и отрицательные числа перед развертыванием в производственную систему.
Ответ 9
Вот самый простой способ добраться:
String number = "10987655.876";
double result = Double.parseDouble(number);
System.out.println(String.format("%,.2f",result));
Выход:
10,987,655.88
Ответ 10
Этот класс предназначен для простого индийского ценового форматирования
public class Test {
public static void main (String a[]){
System.out.println(priceFormatter("10023"));
}
/**
* This method is to convert the price into Indian price
* separator format
* @param inputPrice
* @return
*/
public static String priceFormatter(String inputPrice){
try {
if(!isNumeric(inputPrice)){
return inputPrice;
}
// to check if the number is a decimal number
String newPrice = "",afterDecimal = "";
if(inputPrice.indexOf('.') != -1){
newPrice = inputPrice.substring(0,inputPrice.lastIndexOf('.'));
afterDecimal = inputPrice.substring(inputPrice.lastIndexOf('.'));
}else{
newPrice = inputPrice;
}
int length = newPrice.length();
if (length < 4) {
return inputPrice;
}
// to check whether the length of the number is even or odd
boolean isEven = false;
if (length % 2 == 0) {
isEven = true;
}
// to calculate the comma index
char ch[] = new char[length + (length / 2 - 1)];
if (isEven) {
for (int i = 0, j = 0; i < length; i++) {
ch[j++] = inputPrice.charAt(i);
if (i % 2 == 0 && i < (length - 3)) {
ch[j++] = ',';
}
}
} else {
for (int i = 0, j = 0; i < length; i++) {
ch[j++] = inputPrice.charAt(i);
if (i % 2 == 1 && i < (length - 3)) {
ch[j++] = ',';
}
}
}
// conditional return based on decimal number check
return afterDecimal.length() > 0 ? String.valueOf(ch) + afterDecimal : String.valueOf(ch);
} catch(NumberFormatException ex){
ex.printStackTrace();
return inputPrice;
}
catch (Exception e) {
e.printStackTrace();
return inputPrice;
}
}
}