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

double в int - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.88
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
25.11.2013, 17:55     double в int #1
собственно вопрос в шапке, как перевести double в int? т.е. также как работает делфийская функция round, округлить до целых и выдать число в формате int
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2013, 17:55     double в int
Посмотрите здесь:

cannot convert from 'int *' to 'double *' C++
C++ double и int
C++ int и double
2 int to double C++
Double, int , long double C++
float double int C++
C++ [Warning] converting to `int' from `double'
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newbie666
Заблокирован
25.11.2013, 17:57     double в int #2
double a = 2.345;
int b = (int)a;
hwmlex
 Аватар для hwmlex
41 / 41 / 3
Регистрация: 30.01.2013
Сообщений: 133
25.11.2013, 17:59     double в int #3
или можно так:

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

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

C++
1
2
double x;
int a = static_cast<int>(x);
а вот так норм спс
newbie666
Заблокирован
25.11.2013, 18:31     double в int #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
ну это не правда
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
25.11.2013, 18:34  [ТС]     double в int #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 и т.п. и т.п.

п.с. правда, я проверил
newbie666
Заблокирован
25.11.2013, 18:39     double в int #8
Цитата Сообщение от GetHelp Посмотреть сообщение
мне нужно не округление вниз или вверх, мне нужно округление по правилам математики
тогда вот так:
C++
1
2
3
double value=4,7906596046;
double rounded_value=floor(value+0.5);
int RESULT = (int) rounded_value;
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
25.11.2013, 18:40     double в int #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.
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
25.11.2013, 18:57  [ТС]     double в int #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();
}
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
25.11.2013, 19:00     double в int #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;
}
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
25.11.2013, 19:08  [ТС]     double в int #12
да не будет она работать еще раз вам говорю... что вы хотите добиться прибавлением и вычитанием 0,5? я 0,5 привел просто для примера если что... конкретно попробовал на числе 1,7, выводит 1, а должно 2
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
25.11.2013, 19:13     double в int #13
GetHelp, Вы ничего не путаете ?
Миниатюры
double в int  
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
25.11.2013, 19:16  [ТС]     double в int #14
вообще ничего
Миниатюры
double в int  
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
25.11.2013, 19:31     double в int #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
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
25.11.2013, 19:34  [ТС]     double в int #16
логика мягко говоря странная, а что вы будете делать если у числа больше 1 знака за запятой? скажем 1,75
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
25.11.2013, 19:35     double в int #17
GetHelp, Да потому что не 1,75 а 1.75, наверное?
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
25.11.2013, 19:40  [ТС]     double в int #18
Цитата Сообщение от scenotaph Посмотреть сообщение
GetHelp, Да потому что не 1,75 а 1.75, наверное?
оо... да вот теперь выдает 2 действительно... хотя я и не понимаю почему оно тогда не чекнуло мне ошибку при считывании если запятая вместо точки на это влияет? и по прежнему логика у функции странная (предыдущий пост)

Добавлено через 2 минуты
даже не 1,75, а например попробуйте взять 1,45 или 1,49 и получите 1, а по правилам математики должно выходить 2...
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
25.11.2013, 19:54     double в int #19
GetHelp, при 1.45 и 1.49 по правилам должно быть 1. При округлении до целого берётся во внимание только десятичное. Сотые не влияют.
При считывании не выдало ошибку потому, что считало только 1.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2013, 19:56     double в int
Еще ссылки по теме:

перевести double в int C++
C++ int* to double*
C++ LONG VS DOUBLE / INT VS FLOAT
C++ Shot int b long double
Перевод из wchar_t* в int (double) C++

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

Или воспользуйтесь поиском по форуму:
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
25.11.2013, 19:56  [ТС]     double в int #20
Цитата Сообщение от Hunter13ua Посмотреть сообщение
GetHelp, при 1.45 и 1.49 по правилам должно быть 1. При округлении до целого берётся во внимание только десятичное. Сотые не влияют.
При считывании не выдало ошибку потому, что считало только 1.
ахаха жжете товарищ ! давайте так: вы сейчас идете и открываете учебник математики за 5 (примерно) класс и внимательно читаете как по правилам делать округление...
Yandex
Объявления
25.11.2013, 19:56     double в int
Ответ Создать тему
Опции темы

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