Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2010, 21:08   #1
littlecoder
Пользователь
 
Аватар для littlecoder
 
Регистрация: 01.11.2008
Сообщений: 51
Восклицание (C#)Алгоритм округления с заданной точностью

Здраствуйте. Понадобилась помощь, вот пишу лаболаторную .
Мне нужно написать алгоритм округления числа типа double с заданной точностью , тоисть пользователь вводит число 23,2345, потом вводит значение точности ,например 3, то алгоритм должен вернуть результат 23,235.
Вот наработки:
Код:
class Program
    {
        static string Chislo(double d, int p)
        {
            string str = Convert.ToString(d), result;
            int k;
            for (int i = 0; i < str.Length; i++)
                if (Convert.ToString(str[i]) == ",")
                {
                    k = i;
                    result += ',';
                }
                else
                {
                    result += str[i];
                    k = 0;
                }
            p = p + k - 1;
            if (p < str.Length)
            {
                for (int i = k; i < p; i++)
                {
                    if (i != p)
                    {
                        result += str[i];
                    }
                    else
                    {
                        if (Convert.ToInt32(str[p + 1]) > 4)
                        {
                            result += Convert.ToString(Convert.ToInt32(str[p]) + 1);
                        }
                        else
                        {
                            result += Convert.ToString(Convert.ToInt32(str[p]));
                        }
                    }

                }
            }
            else
            {

                for (int i = k; i < str.Length; i++)
                {
                    result += str[i];
                }
                for (int i = 0; i < p - str.Length; i++)
                    result += "0";
            }

            return result;
        }

        static void Main(string[] args)
        {
            double d;
            Console.WriteLine("Введите действительное число:");
            d = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Введите количество цифр после запятой:");
            int p = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine(Chislo(d, p));
            Console.ReadLine();

        }
    }
Заранее благодарен за любой совет !
P.S.: использование Round меня не устраивает(запретил преподаватель, сказал:" так не интересно,пиши алгоритм сам")).
Самый лучший компьютер, к тому же единственный, который можно производить в большом количестве с помощью неквалифицированного труда, — это человек.

Последний раз редактировалось littlecoder; 23.02.2010 в 21:18.
littlecoder вне форума Ответить с цитированием
Старый 23.02.2010, 21:29   #2
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

Ну не знаю как в С#,а С++ я написал такую функцию
Код:
double Round(double x)
{
	double st=pow(10,Округление);//Округление-количество знаков после запятой которые нам важны
	x*=st;
	x=ceil(x);
	x=x/st;
	return x;
}
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 23.02.2010, 21:43   #3
littlecoder
Пользователь
 
Аватар для littlecoder
 
Регистрация: 01.11.2008
Сообщений: 51
Вопрос

Тема закрыта.Вопрос решен.
static double Round(double value, int digits)
{
double scale = Math.Pow(10.0, digits);
double round = Math.Floor(Math.Abs(value) * scale + 0.5);
return (Math.Sign(value) * round / scale);
}
Самый лучший компьютер, к тому же единственный, который можно производить в большом количестве с помощью неквалифицированного труда, — это человек.

Последний раз редактировалось littlecoder; 23.02.2010 в 21:59.
littlecoder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисления с заданной точностью gessi Паскаль, Turbo Pascal, PascalABC.NET 8 29.10.2014 21:40
посчитать с заданной точностью strateg66 Помощь студентам 1 16.11.2009 00:00
Си. Вычисления с заданной точностью. DedSero Помощь студентам 0 03.11.2009 11:08