Как из float сделать int
Если в арифметических операциях участвуют значения разных типов, то компилятор неявно пытается привести их к одному типу. Кроме того, когда мы присваиваем переменной какое-либо значение, это значение всегда приводится к типу переменной. Например:
char c = 6; int d = c;
Переменной d, которая представляет тип int, присваивается значение типа char, поэтому компилятор выполняет приведение значения от типа char к типу int.
В то же время не всегда преобразования могут быть безопасными, поскольку разные типы имеют разное внутреннее представление. И просто так перейти от одного представления к другому без потери точности данных не всегда возможно.
Рассмотрим, какие преобразования применяет компилятор при арифметических операциях:
- Если один из операндов имеет тип long double , то второй операнд тоже будет преобразован в тип long double
- Если предыдущий пункт не выполняется и если один из операндов имеет тип double , то второй операнд тоже будет преобразован к типу double
- Если предыдущий пункт не выполняется и если один из операндов имеет тип float , то второй операнд тоже будет преобразован к типу float
- Если предыдущий пункт не выполняется и если один из операндов имеет тип unsigned long int , то второй операнд тоже будет преобразован к типу unsigned long int
- Если предыдущий пункт не выполняется и если один из операндов имеет тип long , то второй операнд тоже будет преобразован к типу long
- Если предыдущий пункт не выполняется и если один из операндов имеет тип unsigned , то второй операнд тоже будет преобразован к типу unsigned
- Если предыдущий пункт не выполняется то оба операнда приводятся к типу int
int a = 10; #include int main(void) < int number1 = 10; double number2 = 4; double result = number1 + number2; // 14.000000 printf("result = %f \n", result); // result = 14.000000 return 0; >
В выражении number1 + number2 число number2 представляет тип double , поэтому число number1 будет автоматически приводиться к числу double. И результат операции сложения также будет представлять тип double .
Операция преобразования
С помощью специальной операции преобразования мы можем явным образом привести данные к нужному типу. Например:
int a = 10; int b = 4; int c = a / b; // 2 double d = a / b; // 2.00000 double e = (double)a / (double)b; // 2.50000 printf("c = %d \n", c); printf("d = %f \n", d); printf("e = %f \n", e);
В выражении int c = a / b; результат деления будет целочисленный — 2, при котором дробная часть будет отброшена, так как оба операнда операции представляют целые числа.
В выражении double d = a / b; результат деления будет представлять вещественное число — 2.00000, но так как оба операнда являются целыми числами, то опять же результат операции будет представлять целое число 2, и только поле выполнения деления произойдет присвоение результата переменной d с приведением значения 2 от типа int к типу double.
В выражении double e = (double)a / (double)b применяется явное преобразование данных к типу double, поэтому и результат деления будет представлять вещественное число — 2.50000.
Для выполнения операции приведении в скобках указывается тот тип, к которому надо привести значение:
int number = 70; char symbol = (char) number; printf("symbol = %c \n", symbol); // F printf("symbol (int code) = %d \n", symbol); // 70
В ряде случаев преобразования сопровождаются потерей информации, например, когда числа большей разрядности (скажем размером 4 байт) получаем число меньшей разрядности (например, в 2 байта). Без потери информации проходят следующие цепочки преобразований:
char -> short -> int -> long
unsigned char -> unsigned short -> unsigned int -> unsigned long
float -> double -> long double
При всех остальных преобразованиях, которые не входят в эти цепочки, мы можем столкнуться с потерей точности данных. Так, в примере выше преобразование от int к char не является безопасным, поэтому к таким преобразованиям следует относиться с осторожностью. Например:
#include int main(void) < int number1 = 300; char code = number1; // потеря точности - число number1 усекается до 1 байта printf("code = %d \n", code); // code = 44 return 0; short number2 = 100000; // потеря точности - число 100000 усекается до 2 байт printf("number2 = %d \n", number2); // number2 = -31072 >
Здесь две ситуации небезопасных преобразований. В первом случае число типа int , которое равно 300, присваивается переменной типа char . В итоге переменная code будет равна 44. Почему? Число 300 в двоичной системе:
0000000100101100
Оставляем только первый младший байт:
00101100
И у нас получается число 44 в десятичной системе.
Во втором случае число 100000 (которое по умолчанию представляет тип int ), усекается до разрядности типа short — до двух байт.
short number = 100000;
В итоге число number в реальности будет равно -31072.
Как преобразовать числа с плавающей запятой в целые числа в Pandas
Вы можете использовать следующий синтаксис для преобразования столбца в pandas DataFrame из числа с плавающей запятой в целое число:
df['float_column'] = df['float_column'].astype (int)
В следующих примерах показано, как использовать этот синтаксис на практике.
Пример 1: преобразование одного столбца из числа с плавающей запятой в целое число
Предположим, у нас есть следующие Pandas DataFrame:
import pandas as pd #create DataFrame df = pd.DataFrame() #view data types for each column df.dtypes player object points float64 assists float64 dtype: object
Мы видим, что столбцы очков и помощи имеют тип данных float.
В следующем коде показано, как преобразовать столбец точек из числа с плавающей запятой в целое число:
#convert 'points' column to integer df['points'] = df['points'].astype (int) #view data types of each column df.dtypes player object points int32 assists float64 dtype: object
Мы видим, что столбец точек теперь является целым числом, а все остальные столбцы остались без изменений.
Пример 2. Преобразование нескольких столбцов в целое число
В следующем коде показано, как преобразовать несколько столбцов в DataFrame из числа с плавающей запятой в целое число:
import pandas as pd #create DataFrame df = pd.DataFrame() #convert 'points' and 'assists' columns to integer df[['points', 'assists']] = df[['points', 'assists']].astype (int) #view data types for each column df.dtypes player object points int32 assists int32 dtype: object
Мы видим, что столбцы баллов и передач были преобразованы из чисел с плавающей запятой в целые числа.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные преобразования в Python:
Преобразование float to int

VS10 express(настроена под си) выкинула ошибку Отладчику не удалось обнаружить исходный файл «f:\dd\vctools\crt_bld\SELF_X86\crt\prebuild\tran\i386\ftol2.asm».
Ниже полный текст. Может кто-то знает как его вылечить, буду благодарен.
Поиск источника для «f:\dd\vctools\crt_bld\SELF_X86\crt\prebuild\tran\i386\ftol2.asm». Checksum: MD5
Файл «f:\dd\vctools\crt_bld\SELF_X86\crt\prebuild\tran\i386\ftol2.asm» не существует.
Поиск в документах скриптов для «f:\dd\vctools\crt_bld\SELF_X86\crt\prebuild\tran\i386\ftol2.asm».
Поиск в проектах для «f:\dd\vctools\crt_bld\SELF_X86\crt\prebuild\tran\i386\ftol2.asm».
Файл не был найден в проекте.
Поиск в каталоге «C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\vc7\atlmfc».
Поиск в каталоге «C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\vc7\crt».
Поиск в каталоге «E:\».
Поиск в каталоге «C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc».
Поиск в каталоге «C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfcm».
Поиск в каталоге «C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\atl».
Поиск в каталоге «C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src».
Поиск в каталоге «».
Поиск в каталоге «C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include».
Поиск в каталоге «C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include».
Поиск в каталоге «C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include».
Поиск в каталоге «C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\\include».
Поиск в каталоге «».
Настройки исходных файлов отладки для активного решения указывают, что отладчик не будет запрашивать у пользователя поиск файла: f:\dd\vctools\crt_bld\SELF_X86\crt\prebuild\tran\i386\ftol2.asm.
Отладчику не удалось обнаружить исходный файл «f:\dd\vctools\crt_bld\SELF_X86\crt\prebuild\tran\i386\ftol2.asm».
Тема: Преобразование из float в int
![]()
Преобразование из float в int
Привет всем, есть вопрос в плане передачи переменной int с пр200 на пк через преобразователь где установлена будет скада, пока не знаю что за версия.
например нужно мне отслеживать давление, изначально, в софте значение давления это переменная флоат, число с хвостом, например 2.5 бар, преобразую например в интежер, получаеться 2 бар.
Как сделать чтобы данные в скаде отображались правильно так же 2.5. бар а не 2 бар
10.03.2022, 15:17 #2
- Просмотр профиля
- Сообщения форума
- Личное сообщение
- Домашняя страница
- Просмотр статей
![]()
Пользователь Регистрация 25.06.2011 Адрес Галактика Андромеды (M31) Сообщений 8,067
Сообщение от batur 
Привет всем, есть вопрос в плане передачи переменной int с пр200 на пк через преобразователь где установлена будет скада, пока не знаю что за версия.
например нужно мне отслеживать давление, изначально, в софте значение давления это переменная флоат, число с хвостом, например 2.5 бар, преобразую например в интежер, получаеться 2 бар.
Как сделать чтобы данные в скаде отображались правильно так же 2.5. бар а не 2 бар
Такое впечатление, что Вы «первый раз замужем»(БМП), короче, округлите до десятых долей, умножьте на 10 и преобразуйте в инт, в ПР всё!
В скаде(или ОРС-сервере) преобразуете обратно во флоат и разделите на 10(перенести запятую на один знак влево), всё!
Последний раз редактировалось Сергей0308; 10.03.2022 в 15:26 .
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.