- 3.2. Converting from double to int ¶
- double в int
- Преобразование типов в C++
- Неявное преобразование типов
- Пример 1: из int в double
- Пример 2: из double в int
- Потеря данных (сужение преобразования)
- Явное преобразование
- C-style
- Использование функционального стиля
- Пример 3: приведение типов
- Операторы преобразования типов
3.2. Converting from double to int ¶
As I mentioned, C++ converts int s to double s automatically if necessary, because no information is lost in the translation. On the other hand, going from a double to an int requires rounding off. C++ doesn’t perform this operation automatically, in order to make sure that you, as the programmer, are aware of the loss of the fractional part of the number.
The simplest way to convert a floating-point value to an integer is to use a typecast. Typecasting is so called because it allows you to take a value that belongs to one type and “cast” it into another type (in the sense of molding or reforming, not throwing).
The syntax for typecasting is like the syntax for a function call. For example:
double pi = 3.14159; int x = int (pi);
The int function returns an integer, so x gets the value 3. Converting to an integer always rounds down, even if the fraction part is 0.99999999.
For every type in C++, there is a corresponding function that typecasts its argument to the appropriate type.
Q-1: In the lab, we measured a temperature of 7.99999999 degrees C, using an extremely precise measuring device. Now we are writing a program to perform some calculations with our data. Consider the following C++ code.
int main () double temp = 7.99999999; int roundedTemp = int (temp); cout <roundedTemp; >
What is the value of roundedTemp?
Q-2: Your final grade consists of your average performance on exam 1 and exam 2. Your professor is using C++ to grade the exams and allows you to choose which method you’d like your exam to be graded.
double exam1 = 88.8; double exam2 = 72.7; double exam2 = 97.9;
double final = (int(exam1) + int(exam2) + int(exam3)) / 3;
int final = int((exam1 + exam2 + exam3) / 3);
Which method would you choose and why?
© Copyright 2020 — Based on How to Think Like a Computer Scientist. Created using Runestone .
double в int
Преобразовать 2 числа int в 1 число float(double) | double int1.int2
Всем привет. Изучая азы C++, столкнулся с такой проблемой. Есть два значения типа int, их.
Double, int , long double
Как вычислить диапазоны типов вручную указанных в название темы?
double x; int a = static_castint>(x);
Сообщение от GetHelp
Сообщение от newbie666
Сообщение от hwmlex
Сообщение от newbie666
Добавлено через 25 секунд
Сообщение от hwmlex
double x; int a = static_castint>(x);
Сообщение от LuxArt
double a = 3.7; int toLower, toUpper; toLower = (int)floor(a); // округление вниз до ближайшего целого toUpper = (int)ceil(a); // округление вверх до ближайшего целого
Сообщение от GetHelp
Сообщение от LuxArt
а ведь и правда надо еще как то округлять.
Добавлено через 1 минуту
Сообщение от newbie666
double a = 3.7; int toLower, toUpper; toLower = (int)floor(a); // округление вниз до ближайшего целого toUpper = (int)ceil(a); // округление вверх до ближайшего целого
мне нужно не округление вниз или вверх, мне нужно округление по правилам математики, т.е. если меньше 0,5 то 0, если больше 0,5 то 1 и т.п. и т.п.
Сообщение от GetHelp
double value=4,7906596046; double rounded_value=floor(value+0.5); int RESULT = (int) rounded_value;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#include #include #include 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; i10; i++){ float x = ( rand() % 1000 ) / 10.0 - 50.0; cout ( 5) <" : " ( x) ; } cin.get(); return 0; }
Сообщение от Hunter13ua
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#include #include #include 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; i10; i++){ float x = ( rand() % 1000 ) / 10.0 - 50.0; cout ( 5) <" : " ( x) ; } cin.get(); return 0; }
я конечно ваш код ни хрена не понял, потому что знаю только чистый си, си++ не вкуриваю вообще. но по моему в функции бред какой то.
Добавлено через 2 минуты
Сообщение от newbie666
double value=4,7906596046; double rounded_value=floor(value+0.5); int RESULT = (int) rounded_value;
это округляет опять таки до ближайшего нижнего разряда, я же сказал мне это не надо. т.е. попробуйте округлить вашим способом например 1,7, получится 1, а должно 2
Добавлено через 1 минуту
вот заготовка ежели что
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#include #include #include #include void main() { double a; printf("X = "); scanf("%lf",&a); int b = (int) floor(a+0.5); printf("\nRound(X) = %d",b); getch(); }
Сообщение от GetHelp
Этот отдел форума для С++.
Впрочем, сама функция работает с тем же успехом на Си. По всем математическим правилам. Выдаёт правильный результат типа int.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
#include #include 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(; i5; i++){ scanf("%f", &x); printf("%f : %i\n", x, round(x)); } system("pause"); return 0; }
да не будет она работать еще раз вам говорю. что вы хотите добиться прибавлением и вычитанием 0,5? я 0,5 привел просто для примера если что. конкретно попробовал на числе 1,7, выводит 1, а должно 2
Это очень странно, мягко говоря О_о..
Могу пояснить логику на примере «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
Преобразование типов в C++
С++ позволяет нам преобразовывать данные одного типа в данные другого – это известно как преобразование типов.
В C++ существует два типа преобразования:
Неявное преобразование типов
Преобразование типа, которое автоматически выполняется компилятором, известно как неявное преобразование. Этот тип также известен, как автоматическое преобразование.
Давайте посмотрим на два примера неявного преобразования типов.
Пример 1: из int в double
// Working of implicit type-conversion #include using namespace std; int main() < // assigning an int value to num_int int num_int = 9; // declaring a double type variable double num_double; // implicit conversion // assigning int value to a double variable num_double = num_int; cout num_int = 9 num_double = 9
В программе мы присвоили данные типа int переменной типа double.
Здесь значение int автоматически преобразуется компилятором в double, прежде чем оно будет присвоено переменной num_double .
Пример 2: из double в int
//Working of Implicit type-conversion #include using namespace std; int main() < int num_int; double num_double = 9.99; // implicit conversion // assigning a double value to an int variable num_int = num_double; cout num_int = 9 num_double = 9.99
В программе мы присвоили данные типа double переменной типа int.
Здесь двойное значение автоматически преобразуется компилятором в int, прежде чем оно будет присвоено переменной num_int .
Примечание. Поскольку int не может иметь десятичную часть, цифры после десятичной точки в приведенном выше примере усекаются.
Потеря данных (сужение преобразования)
Как мы видели из приведенного выше примера, преобразование из одного типа данных C++ в другой в С++ подвержено потере данных. Это происходит, когда данные большего типа преобразуются в данные меньшего типа.
Явное преобразование
Когда пользователь в C++ вручную меняет данные с одного типа на другой, это называется явным преобразованием. Этот тип преобразования также известен, как приведение типов.
Есть три основных способа использования явного преобразования в C++:
- Приведение типов в C-style (также известное, как обозначение приведения).
- Обозначение функций (также известное, как приведение типов в старом стиле С++)
- Операторы преобразования типов.
C-style
Как следует из названия, этому типу приведения предпочитает язык программирования C. Это также известно как обозначение приведения.
// initializing int variable int num_int = 26; // declaring double variable double num_double; // converting from int to double num_double = (double)num_int;
Использование функционального стиля
Мы также можем использовать такую функцию, как нотация, для преобразования данных из одного типа в другой.
// initializing int variable int num_int = 26; // declaring double variable double num_double; // converting from int to double num_double = double(num_int);
Пример 3: приведение типов
#include using namespace std; int main() < // initializing a double variable double num_double = 3.56; cout num_double = 3.56 num_int1 = 3 num_int2 = 3
Мы использовали преобразование типа в стиле C и преобразование в функциональный стиль, и отобразили результаты. Поскольку они выполняют одну и ту же задачу, оба дают нам одинаковый результат.
Операторы преобразования типов
Помимо этих двух приведений типов, C++ также имеет четыре оператора преобразования типов: