Разбор 2.000,00 до 2000 и 2.000,15 до 2000,15 - PullRequest
0 голосов
/ 08 января 2020

Я борюсь с форматированием чисел в java.

Мой формат ввода выглядит так (и я не могу его изменить): 2.000,15 и вывод должен выглядеть следующим образом : 2000.15

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

Ввод задается в виде строки.

Я уже пытался использовать DecimalFormat, но это приводит только к IllegalArgumentException

DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getInstance(Locale.ENGLISH);
decimalFormat.setMinimumFractionDigits(0);
decimalFormat.setMaximumFractionDigits(2);
decimalFormat.setGroupingUsed(false);
return decimalFormat.format(Double.parseDouble(characteristicValue));

Ответы [ 3 ]

6 голосов
/ 08 января 2020

попробуй:

NumberFormat fmt = NumberFormat.getInstance(Locale.GERMAN);
        try {
            BigDecimal bd = new BigDecimal(fmt.parse("2.000,15").toString());
            System.out.println(bd.toString()); // output: 2000.15
        } catch (ParseException e) {
            //ex handling
        }
1 голос
/ 08 января 2020

Вы можете попробовать следующее:

  1. Выберите формат чисел, использующий разделенные точками разделители тысяч разрядов.
  2. Установите минимальные значащие цифры для десятичного знака (дроби) .

Нет необходимости настраивать формат, который уже существует в Java SDK.

import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;

public class FormattingNumbers {
    static NumberFormat inputFormat = NumberFormat.getNumberInstance(Locale.GERMAN);
    static NumberFormat outputFormat = NumberFormat.getNumberInstance(Locale.US);

    static {
        inputFormat.setMinimumFractionDigits(2);
        outputFormat.setMinimumFractionDigits(2);
    }

    public static void main(String[] args) throws ParseException {
        String[] numbers = { "2.000,00", "2.000,15" };

        for (String number : numbers) {
            System.out.println(outputFormat.format(inputFormat.parse(number)));
        }
    }
}

Вывод:

2,000.00
2,000.15

Примечание: Вот список стран, использующих десятичную запятую .

0 голосов
/ 08 января 2020

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

import java.text.DecimalFormat;

class Playground {
    public static void main(String[ ] args) {
        String pattern = "###,###.###";
        DecimalFormat decimalFormat = new DecimalFormat(pattern);

        String format = decimalFormat.format(2000.15);
        System.out.println(format);
    }
}
...