Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > [MS J#] Метод Math.round() как задать кол-во


Автор: thomas 27.1.2008, 12:07
Приветствую всех.
Заранее прошу извинить, если не туда запостил тему.
Вопрос примитивнейший, но для студента сложный и важный.
Вычисляем среднее арифметическое и нужно округлить результат.
Как?
Код

public double gemiddelde()
    {
        double totaal = 0;
        for (int i = 0; i < Cijfers.length; i++)
        {
            totaal += Cijfers[i];
        }
        return Math.round(totaal / Cijfers.length);
    }


Данный способ выдает, на пример 5,0 или 7,0. А хотелось бы два знака после запятой.

Заранее благодарю.

ЗЫ первый урок по данному языку. Может есть и другой способ.

Автор: Kangaroo 27.1.2008, 12:39
thomas, кол-во знаков нужно задавать при выводе. 
Код

double d = 3.1415;
System.out.println("Pi number  = %.2f", d);

Автор: thomas 27.1.2008, 13:10
Kangaroo, 
Если честно, то ничего не понял.
Приведенная мной выше функция находиться в классе.
Вызывается из формы таким образом
Код

//обьявление экземпляра класса в форме
Cijferlijst c;

//при нажатии кнопки выводим средне арифметичское в label
String gemid = String.valueOf(c.gemiddelde());
label2.set_Text("" + gemid);


В C# например это решается на ура 
Код

decimal.round(argument, 2);

второй параметр задает кол-во знаков после запятой.

После C# в J# нифига не понятно.  smile 

Автор: LSD 27.1.2008, 13:11
Kangaroo, не забывай, чтоэто J#, а значит это приблизительно JDK 1.1.

thomas, там есть класс BigDecimal?

Автор: thomas 27.1.2008, 13:14
LSD, 
Привествую уважаемый!
В справке нашел, есть BigDecimal. Сейчас буду смотреть его методы.

Добавлено через 13 минут и 19 секунд
Упс, BigDecimal класс из студии 6,0. В VS 2005 такого класса нет в J#.

Автор: LSD 27.1.2008, 13:30
Тогда делай так:
Код

BigDecimal pi = new BigDecimal(Math.PI).setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("pi = " + pi);

Автор: thomas 27.1.2008, 13:37
LSD, 
В 2005 студии такого класса нет.  smile 
А Math.round() округляет до целого.

Если какие еще методы для округления результатов вычислений?

Добавлено через 1 минуту и 24 секунды
Можно ли как то извратиться с помощью подобия String.Format() ?

Добавлено через 2 минуты и 37 секунд
Пусть вычисляется с кучей знаков после запятой, а в label выводиться два знака после запятой.

Автор: Kangaroo 27.1.2008, 13:54
Цитата(LSD @  27.1.2008,  12:11 Найти цитируемый пост)
Kangaroo, не забывай, чтоэто J#, а значит это приблизительно JDK 1.1.

ммм... извиняюсь, не знал. 

Автор: LSD 27.1.2008, 14:44
Ну попробуй тогда так:
Код

double pi = Math.PI;
pi *= Math.pow(10, 2);
pi = Math.round(pi);
pi /= Math.pow(10, 2);
System.out.println("pi = " + pi);


P.S. Как же тяжело работать с таким антиквариатом. Зачем вы вообще изучаете эту отрыжку MS?

Автор: thomas 27.1.2008, 15:05
Цитата

Зачем вы вообще изучаете эту отрыжку MS? 


LSD, я тоже задаю себе этот вопрос. Зачем? 
Но как говориться, жирав большой - ему видней!
Ох уж это министерство образования в столице НАТО.  smile 
Бомбанул бы их кто-то что ли.  smile

Добавлено через 7 минут и 15 секунд
LSD, 
Да, интересный изврат.
Умнож на 100, округли, раздели на сто. Вот и два знака после запятой.  smile  smile  
Но результат дает.  smile

Добавлено через 11 минут и 38 секунд
В итоге функция приняла такой вот вид:
Код

public double gemiddelde()
    {
        double totaal = 0;
        for (int i = 0; i < Cijfers.length; i++)
        {
            totaal += Cijfers[i];
        }
        double res = totaal / Cijfers.length;
        res *= Math.pow(10, 2);
        res = Math.round(res);
        res /= Math.pow(10, 2);
        return res;
    }

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