Десятичный формат Java - столько точности, сколько дано - PullRequest
5 голосов
/ 27 февраля 2012

Я работаю с DecimalFormat, я хочу иметь возможность читать и записывать десятичные дроби с той точностью, которая указана (я конвертирую в BigDecimal).

По сути, я хочу DecimalFormat, который обеспечивает следующий шаблон "\ d + (\. \ D +)?"то есть «хотя бы одну цифру, а затем, возможно, десятичный разделитель, за которым следует хотя бы одна цифра».

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

Я также открыт для альтернативных способов достижения этого.

Редактировать:

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

Ответы [ 2 ]

6 голосов
/ 27 февраля 2012

Так как вы отметили в комментарии, что вам нужна поддержка локали:

Locale locale = //get this from somewhere else
DecimalFormat df = new DecimalFormat();
df.setDecimalFormatSymbols(new DecimalFormatSymbols(locale));
df.setMaximumFractionDigits(Integer.MAX_VALUE);
df.setMinimumFractionDigits(1);
df.setParseBigDecimal(true);

А затем выполните синтаксический анализ.

0 голосов
/ 27 февраля 2012

Кажется, это работает нормально:

public static void main(String[] args) throws Exception{
    DecimalFormat f = new DecimalFormat("0.#");
    f.setParseBigDecimal(true);
    f.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US));// if required


    System.out.println(f.parse("1.0"));   // 1.0
    System.out.println(f.parse("1"));     // 1
    System.out.println(f.parse("1.1"));   // 1.1
    System.out.println(f.parse("1.123")); // 1.123
    System.out.println(f.parse("1."));    // 1
    System.out.println(f.parse(".01"));   // 0.01
}

За исключением двух последних, которые нарушают ваше требование "хотя бы одна цифра".Возможно, вам придется проверить это отдельно, используя регулярное выражение, если это действительно важно.

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