Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 55, средняя оценка - 4.84
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
#1

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

11.05.2011, 19:53. Просмотров 7690. Ответов 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 число отображается с учётом экспоненты.
Как решить проблему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2011, 19:53     Преобразование int в float
Посмотрите здесь:

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

Необъявленный идентификатор, преобразование "int" в "float" - C++
#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 - C++
Доброго времени суток. у меня уже второй раз возник вопрос по поводу перевода Int в Float Sr2=(float)S2/size; тут переменная Sr2 типа...

float double int - C++
Доброй ночи, препод совсем запарил, то ему не так, то ему не эдак. // 8.2.cpp: определяет точку входа для консольного приложения. // ...

char[] в int, float. - C++
Интересует такой вопрос: Допустим у меня есть массив из char, и в этом массиве посимвольно лежат цифры (через %s), т.е: char ach;...

int или float - C++
здрасьти, p=p*6; каким должен быть тип у p? int или float? или без разницы?

int/int != float? Why not? - C++
Всем доброго времени суток! Объясните пожалуйста, почему результатом этих операций является целочисленное значение. Ведь должно...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
11.05.2011, 21:34     Преобразование int в float #2
попробуй так:
C++
1
std::cout << (int)a << std::endl;
mimicria
return (true);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
11.05.2011, 21:42     Преобразование int в float #3
Цитата Сообщение от alexsvk Посмотреть сообщение
При более 6 цифр в значение x число отображается с учётом экспоненты.
Как решить проблему?
Использовать FormatFloat() как вам надо
C++
1
cout<<x<<' '<< FormatFloat("0.0000",a).c_str()<< endl;
ValeryLaptev
Эксперт С++
1039 / 818 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
11.05.2011, 21:47     Преобразование int в float #4
Народ! Вы чего, совсем книжек не читаете?
Блин, читайте манипуляторы и конкретно setprecision()
lega4
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 19
11.05.2011, 21:49     Преобразование int в float #5
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;
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
11.05.2011, 22:20  [ТС]     Преобразование int в float #6
Цитата Сообщение от lega4 Посмотреть сообщение
alexsvk, а что вас, собственно, не устраивает? Все правильно выводит, только погрешность 11 присутствует, но это наверно исправится если использовать SetPrecision.

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

Естественно. Вы же сами написали
Число float состоит из 1 бита знака, 8 бит экспоненты и 23 бит мантиссы.
Бинарное представление 20110511:
0000 0001 0011 0010 1101 1100 1010 1111
Если вы проинтерпретируете это как float, то и получите 3 с копейками *10^(-38).
Но зачем Вы предложили такой вариант выхода из ситуации. Задача в том, чтобы при выводе обеих переменных, выводилось идентичное значение (без использования манипуляторов).
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
12.05.2011, 13:13     Преобразование int в float #9
Без манипуляторов никак
C++
1
cout.setf(ios_base::fixed);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2011, 18:01     Преобразование int в float
Еще ссылки по теме:

Почему float преобразуется в int? - C++
Уважаемые форумчане, помогите найти ошибку, а то у меня уже коллапс мозга. В задаче надо найти кучу всего. Все считает правильно кроме...

Конвертирование float/int to string - C++
Здравствуйте, я пишу программу на dev-c++ и мне надо конвертировать число в string.Я просто не знаю как это сделать в dev-c++. Помогите...

Результат преобразования int в float - C++
Доброго времени суток,пример unsigned int sande1=0,sande2=0; void TForm1::mat_tt(){ float dat=0.0; int posred=0; ...

Разность между int и float - C++
Есть точка CV_INLINE CvPoint cvPoint( int x, int y ) { CvPoint p; p.x = x; p.y = y; return p;

LONG VS DOUBLE / INT VS FLOAT - C++
Всем доброго времени суток! Объясните пожалуйста почему при следующем коде #include &lt;iostream&gt; using namespace std; int main() ...


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

Или воспользуйтесь поиском по форуму:
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
12.05.2011, 18:01  [ТС]     Преобразование int в float #10
В VS 6.0 использовал манипуляторы, но всё равно при выводе float значения используется экспонента.
Yandex
Объявления
12.05.2011, 18:01     Преобразование int в float
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru