Допустимый пользовательский номер Excel с конечной запятой, обработанный DecimalFormat как искаженный - PullRequest
0 голосов
/ 26 сентября 2019

Ниже приведен действительный пользовательский формат чисел в Excel: #, ## 0.0,

Обратите внимание на запятую в конце.Это позволяет Excel уменьшать число на 1000;

аналогично двойным запятым в конце, уменьшать число на миллион.

Однако в Java, используя DecimalFormat, когда я создаю этот формат (какпоказанный ниже в коде, он генерирует исключение с сообщением: Неправильный шаблон "#, ## 0.0,"

String format="#,##0.0,";

DecimalFormat df = new DecimalFormat(format);

Есть ли способ создать этот десятичный формат, который будет выполнять этот масштабвниз?

Например, если я применяю тот же шаблон в Excel к числу 705.0, результат, показанный в Excel, составляет 0,7

Это то, что я ожидаю в качестве вывода после выполнения:

String result = df.format(new Double(705.0));

Если нет никакого способа, я надеюсь, что я бы достиг результата, вручную разделив на 1000, прежде чем применять формат: #, ## 0.0

1 Ответ

0 голосов
/ 26 сентября 2019

Простым решением этой проблемы было бы просто создать свой собственный подкласс NumberFormat, который внутренне использует DecimalFormat, но также отслеживает эти запятые.Что-то вроде

public class ExcelFormat extends NumberFormat {
  private DecimalFormat df;
  private int endingCommas;

  public ExcelFormat(String format) {
    //calculate the ending commas. Remove from format
    //create df using the substring with the commas removed
  }

  public String format(double number, StringBuffer buf, FieldPosition fp) {
    //divide the number by what's indicated by the endingCommas
    return df.format(adjustedNumber);
  }

}

...