Как я могу форматировать номер строки, чтобы иметь запятые и круглые?

Каков наилучший способ форматирования следующего числа, которое присваивается мне как 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;
    }
}

}