Как я могу форматировать номер строки, чтобы иметь запятые и круглые?
Каков наилучший способ отформатировать следующее число, которое передается мне как String?
String number = "1000500000.574" //assume my value will always be a String
Я хочу, чтобы это была строка со значением: 1,000,500,000.57
Как я могу отформатировать его как таковой?
- Как правильно использовать StringBuilder
- Лучший способ разрешить путь к файлу слишком долгое исключение
- Что такое префикс L в C ++?
- Как удалить диакритические знаки (акценты) из строки в .NET?
- Как форматировать номер телефона в виде строки в Java?
- Почему кеш-код hashCode () не указан 0?
- Найти общий префикс строк
- Чтение строки из ввода с символом пробела?
- Как проверить, что Java String не все пробелы?
- Получить домен хоста из URL?
- Заменить подстроку на другую подстроку C ++
- Сравнение строки с пустой строкой (Java)
- Получение ошибки «команда не найдена» при сравнении двух строк в Bash
Возможно, вы захотите посмотреть на class 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));
После того, как вы преобразовали строку в число, вы можете использовать
// format the number for the default locale NumberFormat.getInstance().format(num)
или
// format the number for a particular locale NumberFormat.getInstance(locale).format(num)
Это также может быть выполнено с помощью 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.
Я создал свою собственную утилиту форматирования. Это очень быстро при обработке форматирования наряду с предоставлением вам многих функций 🙂
Он поддерживает:
- Форматирование запятой Например, 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». Возможно, я мог бы добавить десятичную поддержку, но не видел слишком много пользы для нее, так как тогда я мог бы объединить это в class типа BigInteger, который обрабатывает сжатые char [] массивы для математических вычислений.
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); }
вы также можете использовать ниже решение –
public static String getRoundOffValue(double value){ DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00"); return df.format(value); }
Вы можете сделать все преобразование в одной строке, используя следующий код:
String number = "1000500000.574"; String convertedString = new DecimalFormat("#,###.##").format(Double.parseDouble(number));
Последние два символа # в конструкторе DecimalFormat также могут быть 0s. В любом случае.
Вот самый простой способ добраться туда:
String number = "10987655.876"; double result = Double.parseDouble(number); System.out.println(String.format("%,.2f",result));
выход: 10 987 655,88
Первый ответ работает очень хорошо, но для ZERO / 0 он будет отформатирован как .00
Следовательно, формат #, ## 0.00 работает для меня хорошо. Всегда проверяйте разные номера, такие как 0/100 / 2334.30, и отрицательные числа перед развертыванием в производственную систему.
Этот class предназначен для простого индийского форматирования цены
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; } } }