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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 124, средняя оценка - 4.98
AKE
11 / 11 / 0
Регистрация: 09.05.2010
Сообщений: 384
#1

Функция округления double - C++

25.06.2010, 17:00. Просмотров 18207. Ответов 22
Метки нет (Все метки)

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

Функция округления чисел - C++
Здравствуйте, подскажите пожалуйста. Написала функцию округления цифр void RoundingFunction(double RoundingVariable, int&...

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

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double - C++
Думаю из-за polp #include<iostream> #include<cmath> #include<cstdlib> using namespace std; double polp(double af,double...

Функция floor для округления значения до определённого числа знаков дробной части - C++
Всем привет ребята. кто мог бы объяснить где и что неправильно у меня в коде и как это исправить. Благодарю за внимание. Условие задачи:...

Ошибка: error LNK2001: unresolved external symbol "double __cdecl Akk(double,double,double)" - C++
#include <iostream> #include <cmath> using namespace std; double Akk(double x, double y, double z); int main() { int a, b, c; ...

Почему мы пишем double x (double y)? а не через запятую double x,y - C++
почему мы пишем double x (double y)? а не через запятую double x,y

22
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
25.06.2010, 17:04 #2
C++
1
2
3
4
5
6
7
#include <iostream>
int main()
{
    double s;
    std::cout<<"Enter s\n";std::cin>>s;
    std::cout<<"Int s: "<< (int)s <<'\n';
}
Так не пойдет? Просто преобразование типа в int
0
easybudda
Модератор
Эксперт CЭксперт С++
10020 / 5943 / 1004
Регистрация: 25.07.2009
Сообщений: 11,230
25.06.2010, 17:05 #3
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int main(){
    double dval;
    int ival;
    std::cout << "double value = ";
    std::cin >> dval;
    ival = static_cast<int>(dval + 0.5);
    std::cout << "int value = " << ival << std::endl;
    return 0;
}
Добавлено через 32 секунды
Lavroff, так только дробную часть откинет
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
25.06.2010, 17:07 #4
easybudda, Да точно. Подтупил. Не учел что после 6 идет округление в сторону большего числа.
0
easybudda
Модератор
Эксперт CЭксперт С++
10020 / 5943 / 1004
Регистрация: 25.07.2009
Сообщений: 11,230
25.06.2010, 17:08 #5
Цитата Сообщение от Lavroff Посмотреть сообщение
после 6 идет округление в сторону большего числа.
начиная с 5, если точнее
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
25.06.2010, 17:09 #6
easybudda, ну вообщем, вы меня поняли)
0
Nick Alte
Эксперт С++
1646 / 1018 / 120
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
25.06.2010, 18:00 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
В библиотеке math.h есть функции floor и ceil, округляющие в меньшую и большую сторону соответственно. Чтобы округлять от положительные числа от половины, можно написать floor(value + 0.5);
4
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
23.10.2013, 15:51 #8
Не один из увиденных способов не округляет по правилам математики а floor(v+0.5) дает округление для дробных с 3 знаками после запятой если 4 например 0.4445 данный алгоритм не пашет надо менять на floor(v+0.55) соответственно 5 знаков тоесть 0.44445 надо менять на floor (v+0.555) и по аналогии... Кто подскажет как проверит количество знаков после запятой у любого дробного числа???? Необходимо точное округление для мат. статистики.
0
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 09:48 #9
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
#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;
}
Вот это работает точно по правилам... Благодарю за помощь easybudda.
0
ValeryS
Модератор
7014 / 5352 / 529
Регистрация: 14.02.2011
Сообщений: 18,065
27.10.2013, 09:59 #10
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
Не один из увиденных способов не округляет по правилам математики а floor(v+0.5) дает округление для дробных с 3 знаками после запятой если 4 например 0.4445 данный алгоритм не пашет надо менять на floor(v+0.55)
общий способ округления
умножить число на 10 в степени сколько знаков нужно округлить
прибавить 0.5
привести к целочисленным
разделить на 10 в степени сколько знаков нужно округлить
например
нужно округлить 1.2345679 до сотых
C++
1
2
3
4
double a=1.2345679;
double b=a*100.0;
int tmp=b+0.5;
b= (double)tmp/100.0;
0
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 10:06 #11
Цитата Сообщение от ValeryS Посмотреть сообщение
общий способ округления
умножить число на 10 в степени сколько знаков нужно округлить
прибавить 0.5
привести к целочисленным
разделить на 10 в степени сколько знаков нужно округлить
например
нужно округлить 1.2345679 до сотых
C++
1
2
3
4
double a=1.2345679;
double b=a*100.0;
int tmp=b+0.5;
b= (double)tmp/100.0;
даст ошибку при X=0.444444444445, да и в вашем примере сами прощитайте алгоритм ответ будет 1.23
0
grizlik78
Эксперт С++
1982 / 1475 / 126
Регистрация: 29.05.2011
Сообщений: 3,048
27.10.2013, 10:34 #12
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
да и в вашем примере сами прощитайте алгоритм ответ будет 1.23
Конечно 1.23. И это правильный ответ!
0
ValeryS
Модератор
7014 / 5352 / 529
Регистрация: 14.02.2011
Сообщений: 18,065
27.10.2013, 10:37 #13
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
даст ошибку при X=0.444444444445,
какую?
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
ответ будет 1.23
А сколько должен быть?
0
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 10:41 #14
Цитата Сообщение от grizlik78 Посмотреть сообщение
Конечно 1.23. И это правильный ответ!
Да ну ребят вы чего 1.24 разве нет ну тогда учите математику)

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
какую?
А сколько должен быть?
ошибку такую даст ответ 4.44 а не 4.45 как должно быть, и правильный ответ в вашем примере 1.24
0
grizlik78
Эксперт С++
1982 / 1475 / 126
Регистрация: 29.05.2011
Сообщений: 3,048
27.10.2013, 10:48 #15
Ну ладно мы неграмотные. И в C++ нет функции гтовой для округления до сотых. Но вот разработчики питона тоже неграмотные, оказывается.
$ python -c "print round(1.2345679, 2)"
1.23

$ python -c "print round(0.4444444445, 2)"
0.44
Ага.
0
27.10.2013, 10:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2013, 10:48
Привет! Вот еще темы с ответами:

выдает ошибку в условии, функция double - C++
//*************************************************************************************\\ ///////////////////////////////ЗАДАНИЕ...

Функция для преобразования double в строку символов. - C++
Написать функцию для преобразования переменной типа double в строку символов с заданной точностью представления ( dtoa( double num, int...

функция принимает два параметра типа double и возвращает значение типа double - C++
Напишите функцию, которая принимает два параметра типа double и возвращает значение типа double, содержащее их минимум....

Какая функция определяет количество знаков после запятой переменной double? - C++
У меня есть программа, которая считает сумму ряда, в неё вводится значение x, точность, с которой определяется значение ln(x) и по формуле...


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

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

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