Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/216: Рейтинг темы: голосов - 216, средняя оценка - 4.88
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255

Преобразование int в float

11.05.2011, 19:53. Показов 46191. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

C++
1
2
3
int x = 20110511;
double a = x;
cout<<x<<' '<<a<<'\n';
Результат:
20110511 2.01105e+007

Число float состоит из 1 бита знака, 8 бит экспоненты и 23 бит мантиссы.
Бинарное представление 20110511:
0000 0001 0011 0010 1101 1100 1010 1111
Видно, что 24-й бит равен 1, где находятся биты экспоненты.
При более 6 цифр в значение x число отображается с учётом экспоненты.
Как решить проблему?
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.05.2011, 19:53
Ответы с готовыми решениями:

Как происходит преобразование int<<float<int
Как происходит преобразование int&lt;&lt;float&lt;int int n=222222222; float f=(float)n; n=(int)f; n== 222222224; Почему в итоге...

ОШИБКА [Error] cannot convert 'int*' to 'float*' for argument '1' to 'void Syma(float*,int*,int)
Какая то проблема с указателями,незнаю,не хочет щитать суму парних чисел в второй подпрограме.Извиниет за ошибки.Не владею руским.Помогите...

Преобразование int в float (битовый перенос)
Ребят, нигде в интернете не нашел ответа Битовые сдвиги с float не работают Нужно побитово перенести биты INT в float Так что бы...

9
 Аватар для Mиxaил
542 / 447 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
11.05.2011, 21:34
попробуй так:
C++
1
std::cout << (int)a << std::endl;
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
11.05.2011, 21:42
Цитата Сообщение от alexsvk Посмотреть сообщение
При более 6 цифр в значение x число отображается с учётом экспоненты.
Как решить проблему?
Использовать FormatFloat() как вам надо
C++
1
cout<<x<<' '<< FormatFloat("0.0000",a).c_str()<< endl;
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
11.05.2011, 21:47
Народ! Вы чего, совсем книжек не читаете?
Блин, читайте манипуляторы и конкретно setprecision()
0
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 19
11.05.2011, 21:49
alexsvk, а что вас, собственно, не устраивает? Все правильно выводит, только погрешность 11 присутствует, но это наверно исправится если использовать SetPrecision.
Число float состоит из 1 бита знака, 8 бит экспоненты и 23 бит мантиссы.
Бинарное представление 20110511:
0000 0001 0011 0010 1101 1100 1010 1111
Видно, что 24-й бит равен 1, где находятся биты экспоненты.
При более 6 цифр в значение x число отображается с учётом экспоненты.
Ну как бы при выводе и присваивании переменной типа double она будет выводится и присваиваться как double. Если вам надо проинтерпретировать 4 байта памяти, в которых хранится целое x, как float, то надо написать примерно следующее:
int x=2;
float* pf=(float*)&x;
float a=*pf;
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
11.05.2011, 22:20  [ТС]
Цитата Сообщение от lega4 Посмотреть сообщение
alexsvk, а что вас, собственно, не устраивает? Все правильно выводит, только погрешность 11 присутствует, но это наверно исправится если использовать SetPrecision.

Ну как бы при выводе и присваивании переменной типа double она будет выводится и присваиваться как double. Если вам надо проинтерпретировать 4 байта памяти, в которых хранится целое x, как float, то надо написать примерно следующее:
int x=2;
float* pf=(float*)&x;
float a=*pf;
Результат ещё хуже:
20110511 3.28518e-038
Мне нужно, чтобы рядом вывелись идентичные значения.
0
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 19
12.05.2011, 10:37
alexsvk, если вам нужны идентичные значения, то вам уже сказали - используйте setprecision.
Результат ещё хуже:
20110511 3.28518e-038
Естественно. Вы же сами написали
Число float состоит из 1 бита знака, 8 бит экспоненты и 23 бит мантиссы.
Бинарное представление 20110511:
0000 0001 0011 0010 1101 1100 1010 1111
Если вы проинтерпретируете это как float, то и получите 3 с копейками *10^(-38).
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
12.05.2011, 12:34  [ТС]
Цитата Сообщение от lega4 Посмотреть сообщение
alexsvk, если вам нужны идентичные значения, то вам уже сказали - используйте setprecision.

Естественно. Вы же сами написали
Число float состоит из 1 бита знака, 8 бит экспоненты и 23 бит мантиссы.
Бинарное представление 20110511:
0000 0001 0011 0010 1101 1100 1010 1111
Если вы проинтерпретируете это как float, то и получите 3 с копейками *10^(-38).
Но зачем Вы предложили такой вариант выхода из ситуации. Задача в том, чтобы при выводе обеих переменных, выводилось идентичное значение (без использования манипуляторов).
0
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
12.05.2011, 13:13
Без манипуляторов никак
C++
1
cout.setf(ios_base::fixed);
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
12.05.2011, 18:01  [ТС]
В VS 6.0 использовал манипуляторы, но всё равно при выводе float значения используется экспонента.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.05.2011, 18:01
Помогаю со студенческими работами здесь

Функции float average(int arrray[],int from,int to)
Напишите код функции float average(int arrray,int from,int to). Возвращаемым значением функции должно быть среднее значение элементов...

Почему при умножении разнотипных переменных (например, float и int) получается int?
Почему при умножении разнотипных переменных (float price и int unit) получается int? Это же не преобразование типов данных. Почему...

Необъявленный идентификатор, преобразование "int" в "float"
#define _CRT_SECURE_NO_WARNINGS #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #define N 50 #define M 50 int n,m,i,j,k,r; void...

Int в Float
Доброго времени суток. у меня уже второй раз возник вопрос по поводу перевода Int в Float Sr2=(float)S2/size; тут переменная Sr2 типа...

Int в float
Как перевести допустим int v =1 в float b = 0.1? Добавлено через 5 минут Закройте тему


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru