Вопрос:

мотыга, чтобы округлить число от 10 до 5 десятичных знаков

java math rounding

107 просмотра

1 ответ

38 Репутация автора

Я использую Java, чтобы сделать некоторые вычисления. Результаты приходят в сложном формате, таком как «9.2233720368E11».

Я хочу округлить это число до 5 знаков после запятой и сохранить мощность 10 "E11". Я пробовал этот код

rounded = Math.round(subnitOut * 100000.0)/100000.0;

который работает нормально, пока в результатах не появится сила 10 (E), тогда он не будет работать вообще.

Есть ли способ сделать это напрямую? Или я должен иметь дело с этим как текст и использовать текстовые методы, чтобы обрезать нежелательные числа.

Автор: Bari Источник Размещён: 16.04.2017 06:40

Ответы (1)


4 плюса

18825 Репутация автора

Решение

Чтобы отформатировать число с плавающей запятой в научной нотации, чтобы оно показывало только 5 десятичных знаков при сохранении показателя степени, вы можете использовать следующее:

double d = 9.2233720368E11;

DecimalFormat df = new DecimalFormat("0.00000E0");

System.out.println(df.format(d));

>> 9.22337E11

Как вы можете сказать, число 0s, переданное в DecimalFormatконструктор (до E), определяет, сколько десятичных разрядов печатать. Количество 0s, к которому добавляется, Eопределяет, сколько цифр использовать для показателя степени. Это округляет, doubleа значит 9.2233760368E11, даст 9.22338E11.

РЕДАКТИРОВАТЬ: Я также создал метод на случай, если вам нужно по-разному форматировать результаты.

public static String format(double d, int numDecimalPlaces, int numExponentDigits) {
    StringBuilder sb = new StringBuilder("0.%0");

    sb.append(numDecimalPlaces);
    sb.append("d");
    sb.append("E");
    sb.append("%0");
    sb.append(numExponentDigits);
    sb.append("d");

    return new DecimalFormat(String.format(sb.toString(), 0, 0)).format(d);
}

Использование:

double d = 9.2233760368E11;

System.out.println(format(d, 5, 1));

>> 9.22338E11
Автор: Jacob G. Размещён: 16.04.2017 06:54
Вопросы из категории :
32x32