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

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

Восстановить пароль Регистрация
 
Wladios
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 3
27.07.2015, 17:03     Округление числа до двух цифр #1
Привет)
Я только начинаю изучать С++, и вот столкнулся с очень важным вопросом...
Как мне округлить число (double) до 2х цыфр после запятой?
Например :
Я пишу что мне нужно разделить (1/0.82) и мне выдает вот такой результат (1.21951).
Как мне правильно прописать что бы вышло число (1.22)?
Заранее благодарю!!!!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2015, 17:03     Округление числа до двух цифр
Посмотрите здесь:

Вывести все четырехзначные числа, в десятичной записи которых нет двух одинаковых цифр. C++
C++ Определить равна ли сумма первых двух цифр числа третьей его цифре
Сумма каких-либо двух цифр заданного трехзначного натурального числа N равна третьей цифре. C++
C++ Найти произведение четных цифр этого числа. Верно ли, что число содержит данную цифру А более двух раз
C++ Вывести все четырехзначные числа в записи которых нет двух одинаковых цифр
Определить, равна ли сума двух первых цифр четирезначного числа суме двух последних C++
C++ Округление результата деления двух целых чисел в большую сторону с++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Даценд
Модератор
 Аватар для Даценд
2663 / 2578 / 1323
Регистрация: 20.04.2015
Сообщений: 4,857
27.07.2015, 17:13     Округление числа до двух цифр #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
double d = 1/0.82;
d=((int)(d*100+0.5))/100.0;
Eraston
 Аватар для Eraston
53 / 10 / 2
Регистрация: 09.09.2014
Сообщений: 123
27.07.2015, 17:37     Округление числа до двух цифр #3
double округление с точность до N знаков
Байт
 Аватар для Байт
14332 / 9163 / 1321
Регистрация: 24.12.2010
Сообщений: 16,744
27.07.2015, 23:48     Округление числа до двух цифр #4
C++
1
2
int k=2;
printf("%.*f", k, d);
Или
C++
1
printf("%.2f", d);
Добавлено через 20 секунд
C++
1
2
int k=2;
printf("%.*f", k, d);
Или
C++
1
printf("%.2f", d);
Bespridelschic
44 / 44 / 16
Регистрация: 31.07.2013
Сообщений: 345
Завершенные тесты: 3
28.07.2015, 06:39     Округление числа до двух цифр #5
Можно подключить библиотеку iomanip
C++
1
#include <iomanip>
И перед выводом числа прописать функцию setprecision(n) - где n, необходимое количество цифр.
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <iomanip>
using namespace std;
 
int main(){
    double a = 1.2345;
    cout << setprecision(3) << a << endl;
    system("Pause");
    return 0;
}
Результат: 1.23
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.07.2015, 07:05     Округление числа до двух цифр #6
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;
}
.
Nishen
 Аватар для Nishen
219 / 125 / 45
Регистрация: 26.02.2015
Сообщений: 612
28.07.2015, 07:32     Округление числа до двух цифр #7
Я вот так округляю:
1. Подключаю библиотеку <math.h>
2. Использую функцию floor
C++
1
floor(number * 100.0 + 0.5) / 100.0
Вместо 100 можно использовать любое другое число, которое тебе необходимо. Например 10 округлит до 1ого знака, 100 до 2ого и т.д.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.07.2015, 08:09     Округление числа до двух цифр #8
Вот только floor округляет вниз даже тогда, когда приведение к целому округляет в сторону ноля.
Nishen
 Аватар для Nishen
219 / 125 / 45
Регистрация: 26.02.2015
Сообщений: 612
28.07.2015, 08:13     Округление числа до двух цифр #9
taras atavin, немного не понял Вашего сообщения последнего.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.07.2015, 08:23     Округление числа до двух цифр #10
Я тоже немного прогнал. Не
C++
1
c=((double)((signed long long int)((a/b)*100.0+0.5)))/100.0;
, а
C++
1
2
c=a/b;
c=((double)((signed long long int)(c*100.0+0.5*sgin(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)(c*100.0+0.5*sgin(c))))/100.0;
. А при округлении вниз
C++
1
2
c=a/b;
c=((double)((signed long long int)(abs(c)*100.0+0.5)))*sgin(c)/100.0;
и
C++
1
cout<<((double)((signed long long int)(abs(c)*100.0+0.5)))*sgin(c)/100.0;
.

Добавлено через 1 минуту
Цитата Сообщение от Nishen Посмотреть сообщение
taras atavin, немного не понял Вашего сообщения последнего.
floor(-1.2) равно -2, а надо -1.

Добавлено через 3 минуты
Округление вниз - это когда результат округления всегда не больше округляемого значения, а если округляемое значение дробное, то результат округления меньше его, но меньше, чем на единицу разряда, до которого округляют. Округление вверх - это когда результат округления всегда не меньше округляемого значения, а если округляемое значение дробное, то результат округления больше его, но меньше, чем на единицу разряда, до которого округляют. Округление в сторону ноля - это округление положительных числе вниз, а отрицательных - вверх.

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
double round(double x, unsigned int d)
{
 double m;
 for (m=1.0; d>0; --d, m*=10.0);
 if (x<0.0)
 {
  return -floor(-x*m+0.5)/m;
 }
 return floor(x*m+0.5)/m;
}
.
Nishen
 Аватар для Nishen
219 / 125 / 45
Регистрация: 26.02.2015
Сообщений: 612
28.07.2015, 08:51     Округление числа до двух цифр #11
taras atavin, так для отрицательных значений можно использовать ceil, которая округляет вверх.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.07.2015, 08:56     Округление числа до двух цифр #12
Вот только она всё округляет вверх, а надо только отрицательные.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2015, 16:48     Округление числа до двух цифр
Еще ссылки по теме:

Округление числа до двух знаков после запятой C++
Вывести все простые числа, в которых нет двух подряд идущих одинаковых цифр C++
Получить цифры числа равного сумме цифр двух чисел C++
C++ Написать программу, которая определяет является ли сумма двух самых минимальных цифр числа четной
Округление числа C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Wladios
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 3
28.07.2015, 16:48  [ТС]     Округление числа до двух цифр #13
Спасибо, просто и без всякого лишнего!

Добавлено через 16 секунд
Спасибо, просто и без всякого лишнего!
Только
Yandex
Объявления
28.07.2015, 16:48     Округление числа до двух цифр
Ответ Создать тему
Опции темы

Текущее время: 09:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru