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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Wladios
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 3
#1

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

27.07.2015, 17:03. Просмотров 560. Ответов 12
Метки нет (Все метки)

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

Определить, равна ли сумма первых двух цифр четырехзначного числа сумме двух последних цифр - C++
Определить, равна ли сумма первых двух цифр данного четырехзначного числа сумме двух его последних цифр. Создать программу, в которой...

составить линейную программу (сумма двух первых цифр заданного четырёхзначного числа равна сумме двух его последних цифр) - C++
составить линейную программу , печатающую значение true , если указанное высказывание является истинным , и false - в противном случае. ...

Округление числа до двух знаков после запятой - C++
8. Написать программу, которая предлагает пользователю ввести дробное число, округляет его до двух знаков после запятой и выводит результат...

Определить, равна ли сума двух первых цифр четирезначного числа суме двух последних - C++
Определить, равна ли сума двух первых цифр четирезначного числа суме двух последних

Найти все четырехзначные числа у которых сумма первых двух цифр равна сумме двух последних - C++
найти все четырехзначные числа у которых сумма первых двух цифр равна сумме двух последних.

дано натуральное число N. Определить,во сколько раз произведение цифр числа больше суммы цифр.Найти количество чётных цифр в записи числа!! - C++
дано натуральное число N. Определить,во сколько раз произведение цифр числа больше суммы цифр.Найти количество чётных цифр в записи числа!!...

12
Даценд
Модератор
Эксперт .NET
3718 / 3602 / 1828
Регистрация: 20.04.2015
Сообщений: 6,570
27.07.2015, 17:13 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
double d = 1/0.82;
d=((int)(d*100+0.5))/100.0;
1
Eraston
53 / 10 / 2
Регистрация: 09.09.2014
Сообщений: 127
27.07.2015, 17:37 #3
double округление с точность до N знаков
0
Байт
Диссидент
Эксперт C
17251 / 11323 / 1794
Регистрация: 24.12.2010
Сообщений: 22,296
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);
0
Bespridelschic
Eternal junior
84 / 95 / 27
Регистрация: 31.07.2013
Сообщений: 561
Завершенные тесты: 9
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
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
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;
}
.
0
Nishen
453 / 264 / 84
Регистрация: 26.02.2015
Сообщений: 1,242
Завершенные тесты: 2
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ого и т.д.
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
28.07.2015, 08:09 #8
Вот только floor округляет вниз даже тогда, когда приведение к целому округляет в сторону ноля.
0
Nishen
453 / 264 / 84
Регистрация: 26.02.2015
Сообщений: 1,242
Завершенные тесты: 2
28.07.2015, 08:13 #9
taras atavin, немного не понял Вашего сообщения последнего.
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
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;
}
.
0
Nishen
453 / 264 / 84
Регистрация: 26.02.2015
Сообщений: 1,242
Завершенные тесты: 2
28.07.2015, 08:51 #11
taras atavin, так для отрицательных значений можно использовать ceil, которая округляет вверх.
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
28.07.2015, 08:56 #12
Вот только она всё округляет вверх, а надо только отрицательные.
0
Wladios
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 3
28.07.2015, 16:48  [ТС] #13
Спасибо, просто и без всякого лишнего!

Добавлено через 16 секунд
Спасибо, просто и без всякого лишнего!
Только
0
28.07.2015, 16:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2015, 16:48
Привет! Вот еще темы с ответами:

Получить цифры числа равного сумме цифр двух чисел - C++
даны цифры двух целых чисел : двузначного а2а1 и однозначного b,где а1-число единиц,а2-число десятков.получить цифры числа.равного...

Определить равна ли сумма первых двух цифр числа третьей его цифре - C++
bool ifaplusbC(int x) { int a,b,c; a=x/100; b=x%100; b=x/10; c=x%10; if(c==a+b) return true; else

Вывести все четырехзначные числа в записи которых нет двух одинаковых цифр - C++
Вывести все четырехзначные числа в записи которых нет двух одинаковых цифр. Например 1234;1345;1789;6789. Выполнить без функций и...

Вывести все четырехзначные числа, в десятичной записи которых нет двух одинаковых цифр. - C++
Вот, собственно и условие: Вывести все четырехзначные числа, в десятичной записи которых нет двух одинаковых цифр. Пожалуйста, помогите...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru