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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 366, средняя оценка - 4.81
Виктор_Сен
33 / 26 / 1
Регистрация: 01.08.2011
Сообщений: 176
#1

Округление чисел - C++

09.08.2011, 17:44. Просмотров 52884. Ответов 28

Здравствуйте! Не подскажите, как в си++ округлять числа? Дело в том, что я нашёл в справочнике Герберта Шилдта функции округления - round и trunc. Но когда я их вставил в программу, компилятор заругался. А ещё хотелось бы округлять до сотых, до тысячных и т. д. И ещё, округление типа
C++
1
2
double a=3.14;
int b=(int)a;
как происходит, отбрасыванием дробной части, или математически. Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2011, 17:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Округление чисел (C++):

Округление чисел С++ - C++
Как сделать та чтоб после запятой в числе всегда било три цифри хоть ето и ноль . Например: 4.000 4.100 7.111

Не выполняется округление чисел - C++
Здравствуйте, есть код программы, которая считай ряд Тейлора, и при этом все работает, НО как только я добовляю функцию округления, все...

Программа на с\с++ (округление чисел) - C++
помогите пожалуйста, нужно написать программу которая округляет числа не используя уже встроенных в компилятор функций.

Округление дробных чисел С++ - C++
Здравствуйте, нужно округлить дробное число. Самое простое сделать вот так: float smth; smth = 345.678945; printf("%2.3f",...

printf. Округление чисел типа double - C++
Пытаюсь писать программу для округления чисел типа double. // okruglenie double.cpp: определяет точку входа для консольного...

Округление чисел при решении СЛАУ - C++
Добрый день! Подскажите, пожалуйста, программа решает систему линейных алгебраических уравнений вида AX=B методом Гаусса. Но в конце...

28
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
10.08.2011, 13:37 #16
Тогда уж так логичнее будет:
C++
1
2
3
4
inline float truncf(float x)
{       
        return x < 0.0f ? ceilf(x) : floorf(x);
}
В С99 и такая функция определена, с именами trunc(), truncf(), truncl()
0
Виктор_Сен
33 / 26 / 1
Регистрация: 01.08.2011
Сообщений: 176
10.08.2011, 13:50  [ТС] #17
Да, но у меня почему-то на trunc() компилятор ругается. Компилятор Микрософт.
0
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
10.08.2011, 13:56 #18
Виктор_Сен, а зачем второе сравнение? Чем мой вариант плох?
0
Виктор_Сен
33 / 26 / 1
Регистрация: 01.08.2011
Сообщений: 176
10.08.2011, 14:02  [ТС] #19
grizlik78, твой вариант логичнее. Я немного напутал.
0
SLASTY_73
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 22
24.09.2013, 22:15 #20
помогите пожалуйста,мне нужно написать программу которая бы находила абсолютную погрешность каждого числа,затем выполняла цепочку действий с ними и округляла их до двух значащих цифр в числе...
0
SLASTY_73
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 22
24.09.2013, 22:30 #21
По этому заданию нужно написать программу. Подскажите хоть что нибудь,я вообще не представляю как ее писать.
Вычисления со строгим учетом предельных абсолютных погрешностей
Этот метод предусматривает использование правил вычисления предельных абсолютных погрешностей. При пооперационном учете ошибок промежуточные результаты, так же как и их погрешности, заносятся в специальную таблицу, состоящую из двух параллельно заполняемых частей - для результатов и их погрешностей.
Пример 2.
В табл. приведены пошаговые вычисления со строгим учетом предельных абсолютных погрешностей по той же формуле, что и в примере 1, и в предположении, что исходные данные а и b имеют предельные абсолютные погрешности дельта а = дельта b = 0,0005 (т.е. у а и b все цифры верны в узком смысле).
Промежуточные результаты вносятся в таблицу после округления до одной запасной цифры (с учетом вычисленной параллельно величины погрешности); значения погрешностей для удобства округляются (с возрастанием!) до двух значащих цифр. Проследим ход вычислений на одном этапе.
0
Миниатюры
Округление чисел  
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
24.09.2013, 22:42 #22
Цитата Сообщение от Виктор_Сен Посмотреть сообщение
Да, но у меня почему-то на trunc() компилятор ругается. Компилятор Микрософт.
Функция trunc появилась в языке C++ начиная со стандарта С++11.
А вообще тут пример в четырьмя стандартными функциями (round, floor, ceil, trunc)
0
SLASTY_73
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 22
30.09.2013, 21:53 #23
на картинке есть таблица в этой таблице указаны а,в,с,их погрешности и действия с ними. мне нужно написать программу которая бы вычисляла вот эти погрешности чисел,выполняла действия с числами и округляла их с учетом погрешностей.и нужно еще погрешность действий по правилам вычислять,это можно как нибудь реализовать???
0
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 10:04 #24
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <fstream>
#include <stdio.h>
#include <cstdio>
#include <string>
#include <sstream>
#include <iomanip>
using namespace std;
   
string IntToStr(double Val)
{      
    string result;
    std::stringstream ost;
    ost << std::fixed << std::setprecision(20) << ( 22.0 / 7.0 );
    ost << Val;
    result = ost.str();
    return result;
}
 
double Round(double Argument, int Preception)
{
    double s,result;
    string z;
    int znak,k,i;
    znak=fabs(Argument)/Argument;
    Argument=fabs(Argument);
    z=IntToStr(Argument);
    k=z.size()-2;
    Argument=Argument*pow(10.0,double(Preception));
    s=0.5;
    for (i=1;i<=k-2;i++)
        s=s+s*pow(10,double(-i));
    result=znak*floor(Argument+s)/pow(10.0,double(Preception));
    return result;
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    double n;
    cout <<"Введите число!-----> ";cin >>n;
    cout <<"\nЧисло после округления"<<Round(n,2);
    getchar();
    getchar();
    return 0;
}
вот фрагментик реально округляющий числа по математическим правилам, все представленные ранее варианты дадут ошибку например при округлении до 2х знаков число 0.4444444445
0
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
27.10.2013, 10:31 #25
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
вот фрагментик реально округляющий числа по математическим правилам, все представленные ранее варианты дадут ошибку например при округлении до 2х знаков число 0.4444444445
Хм.
Введите число!-----> 0.4444444445

Число после округления0.45
Считаешь, что результат получился по математическим правилам? У математика здесь бы 0.44 получилось.
0
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 10:45 #26
Цитата Сообщение от grizlik78 Посмотреть сообщение
Хм.

Считаешь, что результат получился по математическим правилам? У математика здесь бы 0.44 получилось.
С чего????? учитывается последняя цифра округляешь постепенно до нужного числа и получается 0.45 поразмысли немного)

Добавлено через 1 минуту
последняя 5ка дает нам в следующей цифре 5ку итд до нужного знака
и это по математическим правилам округления...
0
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
27.10.2013, 10:52 #27
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
последняя 5ка дает нам в следующей цифре 5ку итд до нужного знака
и это по математическим правилам округления...
Таких математических правил нет. Это кто-то тебя обманул.
Абсолютное значение разности между точным значением и округлённым не должно быть больше половины разряда, до которого производится округление.
0
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 11:02 #28
Цитата Сообщение от grizlik78 Посмотреть сообщение
Таких математических правил нет. Это кто-то тебя обманул.
Абсолютное значение разности между точным значением и округлённым не должно быть больше половины разряда, до которого производится округление.
Да я сам себя обманул! Не знаю откуда я себе это в голову вбил...
0
ЮрийМ
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 4
24.04.2017, 18:05 #29
Лови и не парся. Нашел на stackoverflow.

double a = 2.12645;
std::cout.precision(2);
std::cout << a;

Округляет до одного знака после запятой (Точка тоже знак. Поэтому в параметре двойка).
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2017, 18:05
Привет! Вот еще темы с ответами:

Округление положительных чисел с плавающей точкой - C++
Добрый день ! Нужно округлить положительных чисел с плавающей точкой в большую сторону к числу кратному 5. то есть если есть...

Округление результата деления двух целых чисел в большую сторону с++ - C++
Существует ли стандартная функция в с++, округляющая результат деления двух целых чисел друг на друга в большую сторону? (5/2=3)

Округление - C++
Почему при таком коде: #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cmath&gt; using namespace std; int main() { cout &lt;&lt;...

Округление - C++
Привет всем.Возникла необходимость округлить число до 1000.Как это реализовать.Помогите пожалуйста.


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

Или воспользуйтесь поиском по форуму:
29
Yandex
Объявления
24.04.2017, 18:05
Ответ Создать тему
Опции темы

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