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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.88
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
#1

double в int - C++

25.11.2013, 17:55. Просмотров 3349. Ответов 31
Метки нет (Все метки)

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

Преобразовать 2 числа int в 1 число float(double) | double int1.int2 - C++
Всем привет. Изучая азы C++, столкнулся с такой проблемой. Есть два значения типа int, их необходимо преобразовать в одно значение типа...

Double, int , long double - C++
Как вычислить диапазоны типов вручную указанных в название темы?

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

int* to double* - C++
double* myDoublePtr; int myInt = 5; int* myIntPtr; myIntPtr = &myInt; // cout << "myIntPtr: " << myIntPtr << " "...

double и int - C++
double buf = Convert::ToDouble(pole->Text);//Обьявляем переиенную buf switch (regim) { case '%': pole->Text =...

int и double - C++
//--------------------------------------------------------------------------- #include "math.h" #include <stdio.h> #include...

31
newbie666
Заблокирован
25.11.2013, 17:57 #2
double a = 2.345;
int b = (int)a;
0
hwmlex
41 / 41 / 3
Регистрация: 30.01.2013
Сообщений: 133
25.11.2013, 17:59 #3
или можно так:

C++
1
2
double x;
int a = static_cast<int>(x);
0
LuxArt
34 / 21 / 2
Регистрация: 14.11.2013
Сообщений: 85
25.11.2013, 18:21 #4
Цитата Сообщение от GetHelp Посмотреть сообщение
также как работает делфийская функция round, округлить до целых
Цитата Сообщение от newbie666 Посмотреть сообщение
double a = 2.345;
int b = (int)a;
Цитата Сообщение от hwmlex Посмотреть сообщение
double x;
int a = static_cast<int>(x);
И оба мимо
У вас нет округления, а только отбрасывание дробной части
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
25.11.2013, 18:27  [ТС] #5
Цитата Сообщение от newbie666 Посмотреть сообщение
double a = 2.345;
int b = (int)a;
выдает 0

Добавлено через 25 секунд
Цитата Сообщение от hwmlex Посмотреть сообщение
или можно так:

C++
1
2
double x;
int a = static_cast<int>(x);
а вот так норм спс
0
newbie666
Заблокирован
25.11.2013, 18:31 #6
Цитата Сообщение от LuxArt Посмотреть сообщение
У вас нет округления, а только отбрасывание дробной части
так правильно:
C++
1
2
3
4
double a = 3.7;
int toLower, toUpper;   
toLower = (int)floor(a); // округление вниз до ближайшего целого 
toUpper = (int)ceil(a); // округление вверх до ближайшего целого
Цитата Сообщение от GetHelp Посмотреть сообщение
double a = 2.345;
int b = (int)a;
выдает 0
ну это не правда
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
25.11.2013, 18:34  [ТС] #7
Цитата Сообщение от LuxArt Посмотреть сообщение
И оба мимо
У вас нет округления, а только отбрасывание дробной части
а ведь и правда надо еще как то округлять...

Добавлено через 1 минуту
Цитата Сообщение от newbie666 Посмотреть сообщение
так правильно:
C++
1
2
3
4
double a = 3.7;
int toLower, toUpper;   
toLower = (int)floor(a); // округление вниз до ближайшего целого 
toUpper = (int)ceil(a); // округление вверх до ближайшего целого


ну это не правда
мне нужно не округление вниз или вверх, мне нужно округление по правилам математики, т.е. если меньше 0,5 то 0, если больше 0,5 то 1 и т.п. и т.п.

п.с. правда, я проверил
0
newbie666
Заблокирован
25.11.2013, 18:39 #8
Цитата Сообщение от GetHelp Посмотреть сообщение
мне нужно не округление вниз или вверх, мне нужно округление по правилам математики
тогда вот так:
C++
1
2
3
double value=4,7906596046;
double rounded_value=floor(value+0.5);
int RESULT = (int) rounded_value;
0
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
25.11.2013, 18:40 #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
#include <iostream>
#include <iomanip>
#include <cstdlib>
 
using namespace std;
 
int round(float x)
{
    if ( x < 0 ) x -= 0.5;
        else x += 0.5;
    return (int) x;
}
 
int main()
{
    for(int i=0; i<10; i++){
        float x = ( rand() % 1000 ) / 10.0 - 50.0;
        cout << setw(5) << x << " : "
            << round(x) << endl;
    }
    cin.get();
    return 0;
}
Что не удивительно, т.к. в С++, в отличие от Delphi, нету функции round.
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
25.11.2013, 18:57  [ТС] #10
Цитата Сообщение от Hunter13ua Посмотреть сообщение
Я так понимаю, человек просит нечто вроде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <iomanip>
#include <cstdlib>
 
using namespace std;
 
int round(float x)
{
    if ( x < 0 ) x -= 0.5;
        else x += 0.5;
    return (int) x;
}
 
int main()
{
    for(int i=0; i<10; i++){
        float x = ( rand() % 1000 ) / 10.0 - 50.0;
        cout << setw(5) << x << " : "
            << round(x) << endl;
    }
    cin.get();
    return 0;
}
Что не удивительно, т.к. в С++, в отличие от Delphi, нету функции round.
я конечно ваш код ни хрена не понял, потому что знаю только чистый си, си++ не вкуриваю вообще... но по моему в функции бред какой то...

Добавлено через 2 минуты
Цитата Сообщение от newbie666 Посмотреть сообщение
тогда вот так:
C++
1
2
3
double value=4,7906596046;
double rounded_value=floor(value+0.5);
int RESULT = (int) rounded_value;
это округляет опять таки до ближайшего нижнего разряда, я же сказал мне это не надо... т.е. попробуйте округлить вашим способом например 1,7, получится 1, а должно 2

Добавлено через 1 минуту
вот заготовка ежели что

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <Windows.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
void main()
{
    double a;
    printf("X = ");
    scanf("%lf",&a);
    int b = (int) floor(a+0.5);
    printf("\nRound(X) = %d",b);
    getch();
}
0
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
25.11.2013, 19:00 #11
Цитата Сообщение от GetHelp Посмотреть сообщение
потому что знаю только чистый си, си++ не вкуриваю вообще...
Этот отдел форума для С++.
Впрочем, сама функция работает с тем же успехом на Си. По всем математическим правилам. Выдаёт правильный результат типа int.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
 
int round(float x)
{
    if ( x < 0 ) x -= 0.5;
        else x += 0.5;
    return (int) x;
}
 
int main()
{
    int i = 0;
    float x = 0.0;
    for(; i<5; i++){
        scanf("%f", &x);
        printf("%f : %i\n", x, round(x));
    }
    system("pause");
    return 0;
}
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
25.11.2013, 19:08  [ТС] #12
да не будет она работать еще раз вам говорю... что вы хотите добиться прибавлением и вычитанием 0,5? я 0,5 привел просто для примера если что... конкретно попробовал на числе 1,7, выводит 1, а должно 2
0
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
25.11.2013, 19:13 #13
GetHelp, Вы ничего не путаете ?
0
Миниатюры
double в int  
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
25.11.2013, 19:16  [ТС] #14
вообще ничего
0
Миниатюры
double в int  
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
25.11.2013, 19:31 #15
Это очень странно, мягко говоря О_о..
Могу пояснить логику на примере "1.7" или "-1.7":
1) для чисел больше нуля мы прибавляем к числу 0.5 ( 1.7 + 0.5 = 2.2 )
2) для чисел меньше нуля мы отнимаем от числа 0.5 ( -1.7 - 0.5 = -2.2 )
3) при return мы делаем явное приведение типов к int, что банально отбрасывает дробную часть. ( от 2.2 останется 2; от -2.2 останется -2 ).
Еще примеры:
0.5 -> 0.5 + 0.5 = 1.0 -> 1
-1.2 -> -1.2 - 0.5 = -1.7 -> -1
0.6 -> 0.6 + 0.5 = 1.1 -> 1
5.2 -> 5.2 + 0.5 = 5.7 -> 5
-4.6 -> -4.6 - 0.5 = -5.1 -> -5
0
25.11.2013, 19:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2013, 19:31
Привет! Вот еще темы с ответами:

2 int to double - C++
Здравствуйте. Вот такой вопрос. В памяти хранится 2 int числа - рубли и копейки, при выводе выводятся через запятую. В задании нужно...

float double int - C++
Доброй ночи, препод совсем запарил, то ему не так, то ему не эдак. // 8.2.cpp: определяет точку входа для консольного приложения. // ...

Перевести double в int - C++
Как перевести значения типа double (после логарифмического преобразования) в int?

cannot convert from 'int *' to 'double *' - C++
Помогите пожалуйста исправить ошибку: error C2440: '=' : cannot convert from 'int *' to 'double *'. #include &lt;iostream.h&gt; void...


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

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

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