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

Каков наилучший способ отформатировать следующее число, которое дается мне как строка?

String number = "1000500000.574" //assume my value will always be a String

Я хочу, чтобы это была строка со значением: 1,000,500,000.57

Как я могу отформатировать его как таковой?

Ответы [ 10 ]

233 голосов
/ 09 сентября 2010

Возможно, вы захотите взглянуть на класс 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));
36 голосов
/ 09 сентября 2010

Как только вы преобразовали свою строку в число, вы можете использовать

// format the number for the default locale
NumberFormat.getInstance().format(num)

или

// format the number for a particular locale
NumberFormat.getInstance(locale).format(num)
35 голосов
/ 11 октября 2016

Это также может быть выполнено с помощью 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

11 голосов
/ 27 октября 2012

Я создал свою собственную утилиту форматирования. Который очень быстро обрабатывает форматирование и дает много возможностей:)

Поддерживает:

  • Форматирование запятой Например. 1234567 становится 1,234,567.
  • Префикс «Тысяча (K), Миллион (M), Миллиард (B), Триллион (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 [] для математических вычислений.

8 голосов
/ 21 сентября 2018

Учитывая, что это результат Google номер один для format number commas java, вот ответ, который работает для людей, которые работают с целыми числами и не заботятся о десятичных числах.*

2,000,000
6 голосов
/ 29 июля 2014
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);
}
5 голосов
/ 28 мая 2014

Вы также можете использовать приведенное ниже решение -

public static String getRoundOffValue(double value){

        DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
        return df.format(value);
}
3 голосов
/ 07 мая 2017

Вот самый простой способ добраться туда:

String number = "10987655.876";
double result = Double.parseDouble(number);
System.out.println(String.format("%,.2f",result)); 

вывод: 10,987,655.88

3 голосов
/ 27 февраля 2016

Вы можете выполнить все преобразования в одной строке, используя следующий код:

String number = "1000500000.574";
String convertedString = new DecimalFormat("#,###.##").format(Double.parseDouble(number));

Последние два знака # в конструкторе DecimalFormat также могут быть 0 с.В любом случае работает.

2 голосов
/ 27 февраля 2014

Первый ответ работает очень хорошо, но для ZERO / 0 он будет иметь формат .00

Следовательно, формат #, ## 0,00 хорошо работает для меня. Всегда проверяйте разные числа, такие как 0/100 / 2334.30 и отрицательные числа, перед развертыванием в производственной системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...