Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Wladios
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 3
1

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

27.07.2015, 17:03. Просмотров 648. Ответов 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
Ответы с готовыми решениями:

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

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

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

Вывести ok , если сумма первых двух цифр числа равна сумме остальных его цифр
От пользователя вводится 4-х значное число. Вывести ok , если сумма первых двух...

Сравнить сумму первых двух цифр числа с суммой двух последних
Дано целое число x (999 < x < 4294967296) 32). Определить: а) что больше...

12
Даценд
Модератор
Эксперт .NET
4152 / 3936 / 2606
Регистрация: 20.04.2015
Сообщений: 7,136
27.07.2015, 17:13 2
Лучший ответ Сообщение было отмечено Wladios как решение

Решение

C++
1
2
double d = 1/0.82;
d=((int)(d*100+0.5))/100.0;
1
Eraston
59 / 11 / 3
Регистрация: 09.09.2014
Сообщений: 130
27.07.2015, 17:37 3
double округление с точность до N знаков
0
Байт
Эксперт C
18318 / 12029 / 2506
Регистрация: 24.12.2010
Сообщений: 24,293
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
225 / 200 / 104
Регистрация: 31.07.2013
Сообщений: 934
Завершенные тесты: 10
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
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
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
468 / 293 / 156
Регистрация: 26.02.2015
Сообщений: 1,359
Завершенные тесты: 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
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
28.07.2015, 08:09 8
Вот только floor округляет вниз даже тогда, когда приведение к целому округляет в сторону ноля.
0
Nishen
468 / 293 / 156
Регистрация: 26.02.2015
Сообщений: 1,359
Завершенные тесты: 2
28.07.2015, 08:13 9
taras atavin, немного не понял Вашего сообщения последнего.
0
taras atavin
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
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
468 / 293 / 156
Регистрация: 26.02.2015
Сообщений: 1,359
Завершенные тесты: 2
28.07.2015, 08:51 11
taras atavin, так для отрицательных значений можно использовать ceil, которая округляет вверх.
0
taras atavin
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
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

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

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

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


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

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

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