String.format () для форматування подвійних у Java


178

Як я можу використовувати String.format (формат String, X) для форматування дублі, як слід ???

2354548.235 -> 2,354,548.23

Дякую!

Відповіді:


295
String.format("%1$,.2f", myDouble);

String.format автоматично використовує локаль за замовчуванням.


36
Ви також можете скористатися певним місцем, скориставшисьString.format(Locale.GERMAN, "%1$,.2f", myDouble);
Олів'є Грегоаре

13
Якщо для форматування є декілька подвійних, використовуйте% 1,% 2 тощо. Наприклад, String.format ("% 1 $, 2f,% 2 $, 2f", myDouble, aDouble)
Moesio

4
Я вважаю, що "% 1 $" в цьому випадку не є обов'язковим. Для мене працює лише "%,. 2f" як формат String.
Метт Пасселл

5
Так, Метт правий. %1, %2і так далі можна використовувати для переупорядкування результатів на основі індексу ваших вхідних аргументів. Дивіться це . Ви можете опустити індекс, і за замовчуванням порядок прийме форматер.
praneetloke

1
Вам слід дати пояснення, що означають різні частини.
Mitulát báti

41
String.format("%4.3f" , x) ;

Це означає, що нам потрібно всього 4 цифри в ансах, з яких 3 повинні бути після десяткової. І f - специфікатор формату подвійний. x означає змінну, для якої ми хочемо її знайти. Працювали для мене. . .


1
Я думаю, це означає, що це буде четверта змінна в аргументах, які випливають, і мають 3 місця після десяткової.
Майкл Фултон

@MichaelFulton Це не так просто: String.format("%014.3f" , 58.656565)-> 0000000058,657: 14 символів: 8 нулів і 5 чисел і 1 кома. Тож у цьому випадку число 14 означає загальну кількість символів (додаткові замінюються на нульовий нульовий, можуть пройти без, тоді воно замінить пробіл) у рядку результатів . .3Частина повністю незалежний тут.
розбірник

Однак тут: String.format("%014.3f" , 58.656565)-> 58,657. Я беру це за те, що перевага йде до .3fчастини: спочатку друкується число з 3 десятковими знаками, а після, якщо є символи, залишилося, воно друкує провідні пробіли (або нулі / що завгодно). У цьому випадку число становить 2 + 3 + 1 = 6 символів, і ми хотіли надрукувати лише 4, тому зайвих пробілів точно немає.
розбірник

24

Якщо ви хочете відформатувати його за допомогою встановлених вручну символів, скористайтеся цим:

DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(',');
DecimalFormat decimalFormat = new DecimalFormat("#,##0.00", decimalFormatSymbols);
System.out.println(decimalFormat.format(1237516.2548)); //1,237,516.25

Хоча переважніше на основі локального форматування форматування.


3
Корисна відповідь! Однак останнє речення "Краще форматування на основі локальної точки зору", проте не має сенсу без контексту. Є досить непогані випадки використання, коли НЕ слід використовувати формат на основі локальних даних, коли ви бажаєте створити певний формат рядка. Наприклад, ви здійснюєте експорт своїх даних у зовнішній файл, і ви хочете мати повний контроль над форматом, не залежним від поточного (або будь-якого) місця.
Honza Zidek

20

код, витягнутий з цього посилання ;

Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String amountOut;

numberFormatter = NumberFormat.getNumberInstance(currentLocale);
amountOut = numberFormatter.format(amount);
System.out.println(amountOut + " " + 
                   currentLocale.toString());

Вихід з цього прикладу показує, як формат одного і того ж числа змінюється в режимі Locale:

345 987,246  fr_FR
345.987,246  de_DE
345,987.246  en_US

13
public class MainClass {
   public static void main(String args[]) {
    System.out.printf("%d %(d %+d %05d\n", 3, -3, 3, 3);

    System.out.printf("Default floating-point format: %f\n", 1234567.123);
    System.out.printf("Floating-point with commas: %,f\n", 1234567.123);
    System.out.printf("Negative floating-point default: %,f\n", -1234567.123);
    System.out.printf("Negative floating-point option: %,(f\n", -1234567.123);

    System.out.printf("Line-up positive and negative values:\n");
    System.out.printf("% ,.2f\n% ,.2f\n", 1234567.123, -1234567.123);
  }
}

І роздрукувати:

3 (3) +3
00003 Формат
з
плаваючою комою за замовчуванням: 1234567,123000 Плаваюча точка з комами: 1.234.567,123000 Негативний за замовчуванням з плаваючою комою: -1.234.567,123000
Негативний параметр з плаваючою комою: (1.234.567, 123000)

Позитивні і негативні
лінії в
рядку : 1.234.567,12 -1.234.567,12


2

Є багато способів зробити це. Ці дані наведені нижче:

Припустимо, ваш початковий номер вказаний нижче: подвійний номер = 2354548.235;

Використання NumberFormatта режим округлення

NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
    DecimalFormat decimalFormatter = (DecimalFormat) nf;
    decimalFormatter.applyPattern("#,###,###.##");
    decimalFormatter.setRoundingMode(RoundingMode.CEILING);

    String fString = decimalFormatter.format(number);
    System.out.println(fString);

Використання String форматів

System.out.println(String.format("%1$,.2f", number));

У всіх випадках вихід буде: 2354548.24

Примітка :

Під час округлення ви можете додати RoundingModeсвій формат. Ось деякі режими округлення, наведені нижче:

    decimalFormat.setRoundingMode(RoundingMode.CEILING);
    decimalFormat.setRoundingMode(RoundingMode.FLOOR);
    decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
    decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
    decimalFormat.setRoundingMode(RoundingMode.UP);

Ось імпорт :

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

1

Використовуйте DecimalFormat

 NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
 DecimalFormat decimalFormatter = (DecimalFormat) nf;
 decimalFormatter.applyPattern("#,###,###.##");
 String fString = decimalFormatter.format(myDouble);
 System.out.println(fString);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.