Преобразование научной записи в десятичную запись - PullRequest
3 голосов
/ 15 марта 2010

Есть аналогичный вопрос о SO, который предлагает использовать NumberFormat, что я и сделал.

Я использую метод parse () NumberFormat.

public static void main(String[] args) throws ParseException{

    DecToTime dtt = new DecToTime();
    dtt.decToTime("1.930000000000E+02");

}

public void decToTime(String angle) throws ParseException{

    DecimalFormat dform = new DecimalFormat();
    //ParsePosition pp = new ParsePosition(13);
    Number angleAsNumber = dform.parse(angle);

    System.out.println(angleAsNumber);
}

В результате я получаю

1.93

Я не ожидал, что это сработает, потому что 1.930000000000E + 02 довольнонеобычно выглядящий номер, нужно ли мне сначала разбирать строки, чтобы удалить нули?Или есть быстрый и элегантный способ?

Ответы [ 3 ]

3 голосов
/ 05 января 2014

Запомните синтаксис String.format, чтобы вы могли преобразовывать свои двойные и большие десятичные числа в строки любой точности без электронной записи:

Этот код Java:

double dennis = 0.00000008880000d;
System.out.println(dennis);
System.out.println(String.format("%.7f", dennis));
System.out.println(String.format("%.9f", new BigDecimal(dennis)));
System.out.println(String.format("%.19f", new BigDecimal(dennis)));

Печать:

8.88E-8
0.0000001
0.000000089
0.0000000888000000000
2 голосов
/ 15 марта 2010

Когда вы используете DecimalFormat с выражением в научной нотации, вам нужно указать шаблон. Попробуйте что-то вроде

DecimalFormat dform = new DecimalFormat("0.###E0");

См. javadocs для DecimalFormat - есть раздел с пометкой «Научная запись».

1 голос
/ 15 марта 2010

Если вы берете свой угол как двойной, а не как строку, вы можете использовать printf magic.

System.out.printf("%.2f", 1.930000000000E+02);

отображает число с плавающей запятой с точностью до 2 знаков после запятой. 193.00.

Если вместо этого вы используете "%.2e" в качестве спецификатора формата, вы получите "1.93e+02"

(точно не знаю, какой вывод вы хотите, но это может быть полезно.)

...