Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Округление числа до двух цифр - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Архивирование программным путем C++. Чем? http://www.cyberforum.ru/cpp-beginners/thread1505785.html
Вот в чем вопрос, как реализовать архивирование? Библиотеки вроде 7-zip плохо документированы, если не сказать больше. Нужна простая и небольшая библиотека, которую можно будет статически слинковать...
C++ Не выделяется память в динамической памяти Подскажите пожалуйста , почему при выполнении operator + (вызов 114 строка) не выделяется память в динамической области ? Получаю аварийное завершение. Программа как-то тормозит ((( ... http://www.cyberforum.ru/cpp-beginners/thread1505771.html
C++ Редактирование битых ссылок
Добрый день товарищи. Знаю не по теме,но нужна строчная помощь не могли бы Вы подсказать,есть ли программы,которые редактируют битые ссылки(или как это наз-ся)?а то друг написал программу и она...
C++ Оператор запятая
int I, j; j=10; i = (j++, j+100, 999+j); почему выведет 1010 а не 1110?
C++ Microsoft Visual Studio Comunity 2013 http://www.cyberforum.ru/cpp-beginners/thread1505737.html
Доброго времени суток!У меня есть вопросы,касающийся непосредственно С++ и Microsoft Visual Studio Comunity. 1.Microsoft Visual Studio Comunity бесплатная ли ПО? 2.Свои продукты,написанные на...
C++ Ошибка ссылка на неразрешенный внешний символ "long __cdecl time_to_secs(struct Time)" #include<iostream> using namespace std; ///////////////////////////////// struct Time { int hours; int minutes; int seconds; }; ///////////////////////////////// подробнее

Показать сообщение отдельно
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.07.2015, 07:05
Wladios, требуется округлить экранное представление, или само частное? Если само частное, то умножить на 100, сложить с 0.5, сумму привести к целому, потом снова к действительному и разделить на 100 и уже этот результат присвоить.
C++
1
c=((double)((signed long long int)((a/b)*100.0+0.5)))/100.0;
Если же только экранное представление, то здесь два пути:
1. Округлить по тому же алгоритму временную величину
C++
1
std::cout<<((double)((signed long long int)(c*100.0+0.5)))/100.0;
.
2. Форматировать вывод, например,
C++
1
std::cout<<std::setprecision(3)<<c<<std::endl;
.
Только поинтересуйтесь, как на целевой платформе приводятся к целому отрицательные числа: округляясь вниз, или в сторону ноля. Формула дана для приведения округлением в сторону ноля, если же на целевой платформе действует округление вниз, то заменяется на
C++
1
2
c=a/b;
c=((double)((signed long long int)(abs(c)*100.0+0.5)))*sgn(c)/100.0;
, а
C++
1
std::cout<<((double)((signed long long int)(c*100.0+0.5)))/100.0;
на
C++
1
std::cout<<((double)((signed long long int)(abs(c)*100.0+0.5)))*sgn(c)/100.0;
и перед этим надо перегрузить функцию
C++
1
2
3
4
5
6
7
8
double abs (double x)
{
 if (x<0.0)
 {
  return -x;
 }
 return x;
}
и прописать функцию
C++
1
2
3
4
5
6
7
8
9
10
11
12
double sgn(double x)
{
 if (x<0.0)
 {
  return -1.0;
 }
 if (x>0.0)
 {
  return 1.0;
 }
 return 0.0;
}
.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru