Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/907: Рейтинг темы: голосов - 907, средняя оценка - 4.87
 Аватар для Veyron
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578

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

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

Студворк — интернет-сервис помощи студентам
Ну собсно вопрос в теме. заранее спасибо))
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.11.2009, 22:46
Ответы с готовыми решениями:

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

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

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

13
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
12.11.2009, 00:15
Например так:

C++
1
2
3
    double a = 4.6789;
    double b = int(a*100)/100.0;
    cout << b << endl;
2
Эксперт по математике/физике
 Аватар для Том Ардер
4218 / 3416 / 396
Регистрация: 15.06.2009
Сообщений: 5,817
12.11.2009, 01:26
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Monte-Cristo Посмотреть сообщение
double b = int(a*100)/100.0;
Чтобы действительно округлить, надо

C++
1
b = int(a*100 + 0.5)/100.0;
4
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
12.11.2009, 01:38
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;
}
2
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
12.11.2009, 01:39
Цитата Сообщение от Том Ардер Посмотреть сообщение
Чтобы действительно округлить, надо
Согласен. Но это для математического округления (с учетом последующих знаков). В программировании, лично мой опыт, применял редко. Чаще нужны были результаты округленные в меньшую сторону. Думаю, автор темы применит необходимое ему округление.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
12.11.2009, 01:47
забавно... в 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
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
12.11.2009, 12:59
А при чем здесь B.G. ?
Стандарт (26.5) не предусматривает наличия в заголовке <cmath> функции round.
1
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
12.11.2009, 14:16
картина не меняется - в GCC работает, в Visual Studio не хочет... очередной респект B.G.
Вот это типичный пример как программисты валят ошибки на кого угодно, только не на себя !
А слабо было почитать документацию прежде чем делать выводы ?
Во-первых, в языке C есть функции ceil() & floor().
Во-вторых функция round() относится к стандарту C99.
Visual Studio 2005/2008 не поддерживают.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
12.11.2009, 14:45
Ну тем не менее удобная функция... А ceil и floor не округляют число так, как хотелось бы... Первая округляет до ближайшего большего, вторая до ближайшего меньшего. По поводу сваливания ошибок - так это не то, чтобы ошибка. Скорее облом просто. Ну увидел, что нет этой функции, решил по-другому как-нибудь... А про стандарты разговор отдельный. VS к примеру itoa поддерживает, а она тоже не стандартная... А уж собственных уродцев от майкрософт всех и не перечислить...
1
 Аватар для Veyron
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
12.11.2009, 18:05  [ТС]
Спасибо всем, задачу решил сам, с помощью информатора... ))) Как заметил Monte-Cristo, я не указал, что не округлить, а именно вывести просто с точностью до Н знаков после запятой. Решение такое:

C++
1
2
3
cout.setf(ios::fixed);
cout.precision(n);
cout << p;
здесь n - число знаков после запятой, p - число для вывода.
1
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
12.11.2009, 20:53
Как заметил Monte-Cristo, я не указал, что не округлить, а именно вывести просто с точностью до Н знаков после запятой.
Зачем обманываешь - в теме указано именно откруглить.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.11.2009, 20:57
> Зачем обманываешь - в теме указано именно откруглить

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

Добавлено через 1 минуту
Подскажите если я неправильно написал. Просто вся эта возня с умножением, затем делением.
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
24.04.2017, 18:10
Округление до 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;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.04.2017, 18:10
Помогаю со студенческими работами здесь

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

Округлить число до 25 знаков после десятичной точки
Есть простая задача: вот я ее решаю таким способом, т.к в задании написано округлить #include &lt;fstream&gt; #include...

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

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

Вывести вещественное число с 4 знаками после запятой
Условие задачи: Введите 4 действительных числа и выведите их сумму с 4 знаками после запятой.


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru