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

double в int

25.11.2013, 17:55. Показов 69231. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru