13 Вопрос: Двойное десятичное форматирование в Java

вопрос создан в Mon, Jan 4, 2016 12:00 AM

У меня возникли проблемы с форматированием десятичных чисел двойного числа. Если у меня есть двойное значение, например 4.0, как мне отформатировать десятичные дроби, чтобы вместо этого было 4,00?

    
98
  1. @ NullUserException ... что?
    2012-10-09 18: 38: 51Z
  2. Попробуйте использовать String.format() или java.text.Format .
    2012-10-09 18: 39: 49Z
  3. 2014-04-03 12: 06: 49Z
  4. 2015-10-21 02: 11: 22Z
13 ответов                              13                         

Одним из способов будет использование NumberFormat .

NumberFormat formatter = new DecimalFormat("#0.00");     
System.out.println(formatter.format(4.0));

Вывод:

4.00 сильный> р>     

193
2012-10-09 18: 47: 40Z
  1. Да, но я не хочу запятую, я хочу десятичный знак.
    2012-10-09 18: 46: 25Z
  2. Я не вижу запятой в выводе. Смотрите отредактированный ответ.
    2012-10-09 18: 48: 03Z
  3. Я получаю запятую. Это то, что я сделал. "double variable; NumberFormat formatter = new DecimalFormat (" # 0.00 "); System.out.println (formatter.format (variable));
    2012-10-09 18: 53: 35Z
  4. Вы получаете запятую из-за языка по умолчанию, используемого вашей JVM, который, вероятно, отличается от языка Nambari. Посмотрите на NumberFormat javadoc: docs.oracle .com /JavaSE /1.4.2 /документы /API /Java /текст /...
    2012-10-09 18: 54: 53Z
  5. Как указывал zim2001, ваш языковой стандарт может отличаться. Прочитайте ссылку, приведенную в моем ответе. В конце вы найдете информацию об этом.
    2012-10-09 18: 57: 13Z

В Java 8 вы можете использовать метод format ..: -

System.out.format("%.2f", 4.0); // OR

System.out.printf("%.2f", 4.0); 
  • f используется для значения точки floating.
  • 2 после десятичной дроби означает количество десятичных знаков после .

Для большинства версий Java вы можете использовать DecimalFormat: -

    DecimalFormat formatter = new DecimalFormat("#0.00");
    double d = 4.0;
    System.out.println(formatter.format(d));
    
61
2017-06-12 13: 19: 01Z

Используйте String.format :

String.format("%.2f", 4.52135); р>     

38
2012-10-09 18: 37: 36Z
  1. я пытался это сделать, но я хочу использовать десятичный знак, а не запятую ...
    2012-10-09 18: 40: 31Z
  2. String.format также принимает локаль в качестве первого параметра для учета форматирования десятичного знака.
    2012-10-09 18: 41: 36Z
  3. Чтобы избежать специфичных для локали десятичных знаков (таких как запятая), укажите локаль США: String.format (Locale.US, "%. 2f", 4.52135)
    2017-09-22 20: 16: 29Z
  4. Я бы сказал, "чтобы использовать точку, специфичную для локали США, в качестве десятичного знака, указать локаль для США" .. эта идея, что привычки США являются правильными, и все остальное "народные" вещи сводят меня с ума.
    2018-03-03 12: 05: 05Z

Используя String.format, вы можете сделать это:

double price = 52000;
String.format("$%,.2f", price);

Обратите внимание на запятую, которая отличает его от ответа @ Vincent

Вывод:

$52,000.00 р>

Хорошим ресурсом для форматирования является официальный официальный Java-страница по теме

    
17
2016-03-18 22: 09: 41Z

Вы всегда можете использовать статический метод printf from System.out - тогда вы реализуете соответствующий форматер; это экономит кучу места, в котором другие примеры требовали от вас.

Пример:

System.out.format("%.4f %n", 4.0); 

System.out.printf("%.2f %n", 4.0); 

Экономит место в куче, что является довольно большим бонусом, тем не менее я придерживаюсь мнения, что этот пример гораздо более управляем, чем любой другой ответ, тем более что большинство программистов знают функцию printf из C (хотя Java слегка изменяет функцию /метод) . р>     

6
2012-10-09 19: 07: 37Z
  1. @ Baz Я пропустил важную деталь, здесь не упоминается printStream. OP запрашивает справку по форматированию (которую можно было бы легче найти, посмотрев документы Java) в стандартный поток вывода. Объясните.
    2012-10-09 18: 46: 10Z
  2. Мой плохой. Искал не ту версию Javadoc (1.4). Кстати: out - это PrintStream.
    2012-10-09 18: 47: 02Z
  3. @ Baz Не беспокойтесь. Да, я предполагал, что это тот класс, на который вы ссылались, во всех моих книгах printf упоминается как статический метод из System.out (так как эти методы являются статическими). ​​
    2012-10-09 18: 47: 49Z
  4. Точнее говоря, printf - это статический метод PrintStream. См. здесь ;) Но, тем не менее, +1.
    2012-10-09 18: 52: 31Z
  5. @ Baz Из документов класс printStream унаследовал System.out. Возможно, я могу ошибаться - хотя довольно странно наследовать статический метод (это вообще возможно)? Вы, я ожидаю, что правильно, хотя.
    2012-10-09 18:58: 17Z
new DecimalFormat("#0.00").format(4.0d);
    
3
2012-10-09 18: 39: 34Z
  1. Отличный ответ ....:)
    2014-04-27 01: 46: 22Z
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
    
3
2012-10-09 19: 00: 26Z

Альтернативным методом является использование метода setMinimumFractionDigits из класса NumberFormat.

Здесь вы в основном указываете, сколько чисел вы хотите отобразить после десятичной точки.

Таким образом, при вводе 4.0 будет получено 4.00 при условии, что указанная вами сумма равна 2.

Но если ваш вход Double содержит больше указанной суммы, он займет указанную минимальную сумму, затем добавьте еще одну цифру, округленную вверх /вниз

Например, 4.15465454 с указанием минимального количества 2 приведет к получению 4.155

NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));

Попробуйте в Интернете

    
1
2017-11-01 08: 42: 21Z

Работает на 100%.

import java.text.DecimalFormat;

public class Formatting {

    public static void main(String[] args) {
        double value = 22.2323242434342;
        // or  value = Math.round(value*100) / 100.0;

        System.out.println("this is before formatting: "+value);
        DecimalFormat df = new DecimalFormat("####0.00");

        System.out.println("Value: " + df.format(value));
    }

}
    
0
2017-04-20 15: 27: 55Z

Есть много способов сделать это. Те приведены ниже:

Предположим, ваш оригинальный номер указан ниже:

 double number = 2354548.235;

Использование NumberFormat:

NumberFormat formatter = new DecimalFormat("#0.00");
    System.out.println(formatter.format(number));

Использование String.format:

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

Использование десятичного формата и шаблона:

NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
        DecimalFormat decimalFormatter = (DecimalFormat) nf;
        decimalFormatter.applyPattern("#,###,###.##");
        String fString = decimalFormatter.format(number);
        System.out.println(fString);

Использование десятичного формата и шаблона

DecimalFormat decimalFormat = new DecimalFormat("############.##");
        BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
        System.out.println(formattedOutput);

Во всех случаях выход будет: 2354548,23

Примечание

Во время округления вы можете добавить 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;
    
0
2019-04-07 05: 17: 31Z

Первый импорт NumberFormat. Затем добавьте это:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

Это даст вам два десятичных знака и поставит знак доллара, если он имеет дело с валютой.

import java.text.NumberFormat;
public class Payroll 
{
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
    {
    int hoursWorked = 80;
    double hourlyPay = 15.52;

    double grossPay = hoursWorked * hourlyPay;
    NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

    System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
    }

}
    
- 2
2015-10-27 23: 30: 32Z
  1. Вопрос не об отображении валюты, а более точный ответ с использованием функций форматирования), как описано в других ответах).
    2015-10-27 23: 29: 04Z

Вы можете сделать это следующим образом:

double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
    
- 3
2012-10-09 18: 39: 45Z
  1. Не работает .. Попробовал ??
    2012-10-09 18: 42: 43Z
  2. Не работает, потому что вместо ## используется 00
    2015-06-29 16: 39: 26Z

Я знаю, что это старая тема, но если вы действительно хотите, чтобы точка вместо запятой, просто сохраните свой результат как X, 00 в строку, а затем просто измените его на период, чтобы вы получили x.00

Самый простой способ - просто заменить.

String var = "X,00";
String newVar = var.replace(",",".");

Результатом будет желаемый X.00 . Также для простоты вы можете сделать все это за один раз и сохранить его в двойной переменной:

Double var = Double.parseDouble(("X,00").replace(",",".");

Я знаю, что этот ответ сейчас бесполезен, но, возможно, кто-то, кто проверяет этот форум, будет искать быстрое решение, подобное этому.

    
- 4
2015-12-02 19: 43: 10Z
источник размещен Вот