Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как избавиться от округления Double?


Автор: m0zg 25.12.2009, 14:44
Вот, например:

Код

        System.out.println(String.format(Locale.US, "%.2f", 12.789));


Мне вообще не нужно, чтобы число округлялось и выводилось 12.79. Я просто хочу, чтобы после точки было 2 цифры.

Автор: MaxPayneC 25.12.2009, 14:53
http://forum.vingrad.ru/forum/topic-284725.html

Автор: m0zg 25.12.2009, 15:04
Цитата(MaxPayneC @ 25.12.2009,  14:53)
http://forum.vingrad.ru/forum/topic-284725.html

Не нашёл ничего подходящего

Автор: Akeem 25.12.2009, 15:17
DecimalFormat тебе в помощь

Автор: m0zg 25.12.2009, 15:28
Получается то же самое:

Код

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(12.789));


12.79

Автор: MaxPayneC 25.12.2009, 15:32
Цитата(m0zg @  25.12.2009,  15:04 Найти цитируемый пост)
Не нашёл ничего подходящего 

Прочтите тред еще раз. Там объясняется, откуда берутся подобные ошибки округления.

Автор: serger 25.12.2009, 15:52
Цитата(MaxPayneC @  25.12.2009,  15:32 Найти цитируемый пост)
Прочтите тред еще раз. Там объясняется, откуда берутся подобные ошибки округления. 

из http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html :
Цитата

then the value will be rounded using the round half up algorithm.

Хз как убрать округление, разве что самому...

Автор: goodday1941 25.12.2009, 16:34
http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigDecimal.html

читаем АПИ:
Цитата

The BigDecimal class gives its user complete control over rounding behavior, forcing the user to explicitly specify a rounding behavior for operations capable of discarding precision


хотя это Вам вряд ли как-то поможет :(

Автор: LSD 25.12.2009, 17:22
Цитата(goodday1941 @  25.12.2009,  16:34 Найти цитируемый пост)
хотя это Вам вряд ли как-то поможет :(

Поможет, хотя там и будут свои проблемы:
Код

  public static void main(String[] args) throws Exception
  {
    double d = 12.789;
    MathContext mathContext  = new MathContext(4, RoundingMode.DOWN);
    BigDecimal decimal = new BigDecimal(d, mathContext);

    System.out.printf("d = %f%n", d);
    System.out.printf("d = %.2f%n", d);
    System.out.println("d = " + decimal);
  }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)