Как отобразить ненаучные отформатированные значения в JLabel и JTextField? - PullRequest
0 голосов
/ 08 июня 2011

У меня есть строковое значение, которое может содержать значение типа double, integer, ascii или byte, и я помещаю это значение в JLabel.Я хотел бы, чтобы значения double и long были в форме 4000000000000 вместо стиля печати java JLabel по умолчанию 4.0E12.Теперь я знаю, какой тип данных содержится в строке, но я не знаю, как заставить JLabel отображать только ненаучные формы для двойных и целочисленных значений.

Вот что я пробовал до сих пор:

String str = value; // string that holds the value

switch (var) // var that says which data type my str is
{
  case LONG:
  //convert my string from scientific to non-scientific here
  break;
  case DOUBLE:
  //convert my string from scientific to non-scientific here
  break;
  case ASCII:
  //do nothing
  break;
  ...
}

JLabel label = new JLabel();
label.setText(str); //Want this to be in non-scientific form

но этот метод все еще печатает только научную форму.

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

Мое преобразование выглядит так:

str = new DecimalFormat("#0.###").format(str);

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

1 Ответ

1 голос
/ 08 июня 2011

Вы должны использовать другой JLabel, потому что он по умолчанию не выполняет никаких преобразований

JFrame frame = new JFrame();
JLabel label = new JLabel();
DecimalFormat df = new DecimalFormat("#0.###");
label.setText(df.format(4e12));
frame.add(label);
frame.pack();
frame.setVisible(true);

Отображает окно с

4000000000000

Я просто получаю следующеес этим преобразованием

DecimalFormat df = new DecimalFormat("#0.###");
System.out.println(df.format(400000000));
System.out.println(df.format(4000000000000L));
System.out.println(df.format(4e12f));
System.out.println(df.format(4e12));

печатает

400000000
4000000000000
3999999983616   <- due to float rounding error.
4000000000000
...