С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/354: Рейтинг темы: голосов - 354, средняя оценка - 4.58
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116

double в int

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

Студворк — интернет-сервис помощи студентам
собственно вопрос в шапке, как перевести double в int? т.е. также как работает делфийская функция round, округлить до целых и выдать число в формате int
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.11.2013, 17:55
Ответы с готовыми решениями:

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

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

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

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

C++
1
2
double x;
int a = static_cast<int>(x);
0
36 / 23 / 10
Регистрация: 14.11.2013
Сообщений: 85
25.11.2013, 18:21
Цитата Сообщение от GetHelp Посмотреть сообщение
также как работает делфийская функция round, округлить до целых
Цитата Сообщение от newbie666 Посмотреть сообщение
double a = 2.345;
int b = (int)a;
Цитата Сообщение от hwmlex Посмотреть сообщение
double x;
int a = static_cast<int>(x);
И оба мимо
У вас нет округления, а только отбрасывание дробной части
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
25.11.2013, 18:27  [ТС]
Цитата Сообщение от newbie666 Посмотреть сообщение
double a = 2.345;
int b = (int)a;
выдает 0

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

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

Добавлено через 2 минуты
даже не 1,75, а например попробуйте взять 1,45 или 1,49 и получите 1, а по правилам математики должно выходить 2...
0
46 / 46 / 18
Регистрация: 25.10.2011
Сообщений: 183
25.11.2013, 19:54
GetHelp, при 1.45 и 1.49 по правилам должно быть 1. При округлении до целого берётся во внимание только десятичное. Сотые не влияют.
При считывании не выдало ошибку потому, что считало только 1.
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
25.11.2013, 19:56  [ТС]
Цитата Сообщение от Hunter13ua Посмотреть сообщение
GetHelp, при 1.45 и 1.49 по правилам должно быть 1. При округлении до целого берётся во внимание только десятичное. Сотые не влияют.
При считывании не выдало ошибку потому, что считало только 1.
ахаха жжете товарищ ! давайте так: вы сейчас идете и открываете учебник математики за 5 (примерно) класс и внимательно читаете как по правилам делать округление...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.11.2013, 19:56
Помогаю со студенческими работами здесь

int и double
//--------------------------------------------------------------------------- #include &quot;math.h&quot; #include &lt;stdio.h&gt; #include...

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

Не int, а double
Как сделать чтобы код принимал дробовые значения, а не целые и в ответ тоже записывал дробь. Помогите пожалуйста:scratch: #include...

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

int* to double*
double* myDoublePtr; int myInt = 5; int* myIntPtr; myIntPtr = &amp;myInt; // cout &lt;&lt; &quot;myIntPtr: &quot; &lt;&lt; myIntPtr &lt;&lt; &quot; &quot;...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru