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

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

Войти
Регистрация
Восстановить пароль
 
Veyron
106 / 106 / 4
Регистрация: 02.06.2009
Сообщений: 579
#1

Как округлить в С++ вещественное число до 2 знаков после запятой? - C++

11.11.2009, 22:46. Просмотров 42574. Ответов 13
Метки нет (Все метки)

Ну собсно вопрос в теме. заранее спасибо))
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2009, 22:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как округлить в С++ вещественное число до 2 знаков после запятой? (C++):

Дано вещественное число, проверить является ли это число симметричным относительно положения точки до двух знаков после запятой. - C++
Только начинаю программировать на с/с++ и столкнулась с логическими выражениями, простейшие задачи могу решить а в эту никак не могу...

Округлить любое вещественное число до определённого количества знаков с математической точностью - C++
Пишем Microsoft Visual Studio -> Win32 Console Application -> C++. Нужно написать функцию, которая округляет любое вещественное число до...

исправьте ошибку!округлить double до 2-х знаков после запятой - C++
округлять,не используя math.h #include "stdafx.h" #include <stdio.h> int main () { double i; printf ("i="); scanf...

Как ограничить число знаков после запятой? - C++
надо ограничить число знаков до 4-х после запятой. В x. вот программа, а вівод x конечно в конце: #include <iostream.h> #include...

Округлить число до 25 знаков после десятичной точки - C++
Есть простая задача: вот я ее решаю таким способом, т.к в задании написано округлить #include <fstream> #include <string>...

Как правильно ограничить число знаков после запятой при выводе массива - C++
Доброго времени суток. Проблема в следующем - считается обратная матрица, при выводе необходимо ограничить число символов после...

13
Monte-Cristo
2790 / 1376 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
12.11.2009, 00:15 #2
Например так:

C++
1
2
3
    double a = 4.6789;
    double b = int(a*100)/100.0;
    cout << b << endl;
2
Том Ардер
Модератор
Эксперт по математике/физике
3771 / 2384 / 302
Регистрация: 15.06.2009
Сообщений: 4,279
12.11.2009, 01:26 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
double b = int(a*100)/100.0;
Чтобы действительно округлить, надо

C++
1
b = int(a*100 + 0.5)/100.0;
3
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,813
12.11.2009, 01:38 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using std::cout;
using std::endl;
#include <math.h>
 
int main(){
    double a = 3.485, b = 4.512;
    cout << "\nBefor rounding:" << endl;
    cout << "a = " << a << "\tb = " << b << endl;
    
    a = round(a * 100.0) / 100.0;
    b = round(b * 100.0) / 100.0;
    cout << "\nAfter rounding:" << endl;
    cout << "a = " << a << "\tb = " << b << endl;
    
    return 0;
}
1
Monte-Cristo
2790 / 1376 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
12.11.2009, 01:39 #5
Цитата Сообщение от Том Ардер Посмотреть сообщение
Чтобы действительно округлить, надо
Согласен. Но это для математического округления (с учетом последующих знаков). В программировании, лично мой опыт, применял редко. Чаще нужны были результаты округленные в меньшую сторону. Думаю, автор темы применит необходимое ему округление.
1
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,813
12.11.2009, 01:47 #6
забавно... в GCC round(double) нормально работает, а мелкомягкий cl в упор его в math.h не видит... если так написать:
C++
1
2
3
4
5
#include <iostream>
#include <cmath>
using namespace std;
int main(){
...
картина не меняется - в GCC работает, в Visual Studio не хочет... очередной респект B.G.
1
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,389
12.11.2009, 12:59 #7
А при чем здесь B.G. ?
Стандарт (26.5) не предусматривает наличия в заголовке <cmath> функции round.
1
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
12.11.2009, 14:16 #8
картина не меняется - в GCC работает, в Visual Studio не хочет... очередной респект B.G.
Вот это типичный пример как программисты валят ошибки на кого угодно, только не на себя !
А слабо было почитать документацию прежде чем делать выводы ?
Во-первых, в языке C есть функции ceil() & floor().
Во-вторых функция round() относится к стандарту C99.
Visual Studio 2005/2008 не поддерживают.
1
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,813
12.11.2009, 14:45 #9
Ну тем не менее удобная функция... А ceil и floor не округляют число так, как хотелось бы... Первая округляет до ближайшего большего, вторая до ближайшего меньшего. По поводу сваливания ошибок - так это не то, чтобы ошибка. Скорее облом просто. Ну увидел, что нет этой функции, решил по-другому как-нибудь... А про стандарты разговор отдельный. VS к примеру itoa поддерживает, а она тоже не стандартная... А уж собственных уродцев от майкрософт всех и не перечислить...
1
Veyron
106 / 106 / 4
Регистрация: 02.06.2009
Сообщений: 579
12.11.2009, 18:05  [ТС] #10
Спасибо всем, задачу решил сам, с помощью информатора... ))) Как заметил Monte-Cristo, я не указал, что не округлить, а именно вывести просто с точностью до Н знаков после запятой. Решение такое:

C++
1
2
3
cout.setf(ios::fixed);
cout.precision(n);
cout << p;
здесь n - число знаков после запятой, p - число для вывода.
1
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
12.11.2009, 20:53 #11
Как заметил Monte-Cristo, я не указал, что не округлить, а именно вывести просто с точностью до Н знаков после запятой.
Зачем обманываешь - в теме указано именно откруглить.
0
Evg
Эксперт CАвтор FAQ
18032 / 6264 / 427
Регистрация: 30.03.2009
Сообщений: 17,219
Записей в блоге: 27
12.11.2009, 20:57 #12
> Зачем обманываешь - в теме указано именно откруглить

Он не обманывает, а исправляет собственную неточность
0
ЮрийМ
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 4
24.04.2017, 17:52 #13
Помню можно было при помощи управляющих символов округлять число. Выглядело это так:
printf ("\f0.2", e) //отображает вещественную переменную "e" с двумя знаками после запятой

Добавлено через 1 минуту
Подскажите если я неправильно написал. Просто вся эта возня с умножением, затем делением.
0
no swear
112 / 92 / 33
Регистрация: 01.07.2016
Сообщений: 565
Завершенные тесты: 1
24.04.2017, 18:10 #14
Округление до 2 знаков.
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
    double a = 1.2355;
    cout << setprecision(3) << a;
}
0
24.04.2017, 18:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2017, 18:10
Привет! Вот еще темы с ответами:

Дано рандомное вещественное число P, найти число M после запятой - C++
1)Дано рандомное вещественное число P, найти число М после запятой, если пользователь задает точность количества чисел после запятой. 2)...

Число знаков после запятой - C++
Никогда не задумывался, но можно-ли ограничить число знаков во флоате, не для вывода, а для рассчетов?

Как вывести double до 2 знаков после запятой? - C++
Нужно вывести число до 2 знаков после запятой. Попробовал так: 1) round(a*100)/100; 2) out.precision(2); out&lt;&lt;a; Мне...

Как отображать у double больше знаков после запятой? - C++
Что-то забыл как это сделать :(


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

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

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