2013-10-27 2 views
0

Я пишу программу, чтобы получить среднее значение из двух чисел. Для тестового случая 2, 4 выход должен быть 3 не 3.0. Для тестового случая -1282660896, -672813783 выход должен быть -977737339.5 не -9.777373395E8.Удалить конечные нули после десятичного числа из double

Мой код выглядит так:

public static void getAve(long a, long b){ 
    System.out.println((double)(a + b)/2); 
} 

Я также создал функцию форматирования, чтобы удовлетворить мои потребности, как это:

public static String fmt(double d) { 
     if (d == (long) d) 
      return String.format("%d", (long) d); 
     else 
      return String.format("%s", d); 
    } 

Но это также не для теста 2

+3

Вам нужен формат, который не переключается на научную нотацию. Я предлагаю вам посмотреть на других или использовать 'new DecimalFormat (« 0. # »). Format (d)' –

+0

@PeterLawrey благодарит peter, что ваше решение сработало :) – Jaguar

+0

Вы можете сохранить объект DecimalFormat как константу для повышения производительности. –

ответ

0

Для вашего случая вы можете сделать String.format("%d", (int)d), но только в том случае, если d не имеет десятичной части.

На самом деле уже есть ответ на что:

How to nicely format floating numbers to String without unnecessary decimal 0?

+2

Если вы собираетесь использовать double для 'int', вы потеряете данные после запятой. –

+0

true, вы можете сделать это только в этом специальном случае, когда нет десятичной части. – Ashalynd

0

Для случая 2, вы хотите использовать формат, который не использует научные обозначения и указания точности:

return String.format("%.1f", d); // only one digit fractional precision 

См. http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax

Кроме того, сравнение double с int опасно, поскольку double не гарантируется представлять точно целое число. Вам лучше проверить, приближается ли оно к целому числу до заданного epsilon.

Смежные вопросы