Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Integer To Float :)

-

Вопросы и ответы, обсуждения

- Ваши вопросы по Pascal/Delphi только в данном разделе

Ответ
 
Опции темы
Старый 29.05.2014, 14:38   #1
 Разведчик
Аватар для y.u.s.i.k
 
y.u.s.i.k никому не известный тип
Регистрация: 12.04.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 1 сообщении
 
По умолчанию Integer To Float :)

Добрый день или еще что-то

Проблемка:

procedure TForm1.Button1Click(Sender: TObject);
var
Stream: TFileStream;
i: Integer;
Float: Single;
begin
// hex 3E0019EE
// int -300351426
// float 0.1250989139
Stream:= TFileStream.Create('FAIL.BIN', fmOpenRead);
// Пропускаю 4 байта
Stream.Seek(4, soFromBeginning);
// Читаем следующие 4 байта
Stream.Read(i, 4);
Edit1.Text := IntToStr (i);

Float := Как перевести Int в Single ? (i);

Stream.Free;
end;

end.

Собственно вопрос в том как в Delphi перевести 4 байта в Single, дробное число с точным результатом.

на С# или еще хуже С++ это сделать куда проще.
Помогите нубу в Delphi
  Ответить с цитированием
Старый 29.05.2014, 18:20   #2
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 111
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Integer To Float :)

Эм. Куда уж проще? Stream.Read(float, 4);
________________
Ни одно доброе дело не остается безнаказанным.

Программы:
PW:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
.
JD:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
.
Статьи:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).


Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
  Ответить с цитированием
Старый 29.05.2014, 21:19   #3
Super Moderator
 Маршал
Аватар для Тигрь
 
Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(
Регистрация: 05.05.2009
Сообщений: 875
Популярность: 48955
Золото Zhyk.Ru: 850
Сказал(а) спасибо: 155
Поблагодарили 739 раз(а) в 274 сообщениях
 
По умолчанию Re: Integer To Float :)

Цитата:
Сообщение от DinmaiteПосмотреть сообщение
Эм. Куда уж проще? Stream.Read(float, 4);

эм, то что ты предлагаешь это просто представленее прежнего содержимого из типа Int как тип Float.
он наверно хочет функцию аналагичную функции IntToSt, только IntToFloat.
что бы к примеру напишу в псевдокоде
Код:
var
  i: integer;
  Float: Single;
begin
  i := 15;
  Float := IntToFloat(i);
И флоат равнялся именно 15.0

Если ванга мод у меня работает правильно и он хочет того что я предвидел то вот код:

Код:
procedure TForm2.btn2Click(Sender: TObject);
var
  i: integer;
  Float: Single;
begin
  i := 15;
  Float := i.ToSingle;
  Caption := Float.ToString;
end;
А если ему надо так как предлагаешь ты то вопрос им поставлен очень тупо. А у тебя скилл ванги прокачан круче моего.
________________
Продаю приват читы для AION Absolute, desteny 3.5, Legend, Cataclysm, Ru, EU, NA
Продаю многооконку на R2 Пишу читы на заказ под любые игры. Предложения в ЛС.
Все мои читы/программы/статьи тут:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).

Написал 2 или более раз одно и то же мне в личку - улетел в блок. Не умеешь пользоваться личными сообщениями, не видишь отправленные, твои проблемы. Учись пользоваться форумом.
  Ответить с цитированием
Старый 29.05.2014, 22:20   #4
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 111
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Integer To Float :)

ээээ. зачем?
Разве
Код:
procedure TForm2.btn2Click(Sender: TObject);
var
  i: integer;
  Float: Single;
begin
  i := 15;
  Float := i;
  Caption := Float.ToString;
end;
Не запишет именно 15?
________________
Ни одно доброе дело не остается безнаказанным.

Программы:
PW:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
.
JD:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
.
Статьи:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).


Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
  Ответить с цитированием
Старый 30.05.2014, 05:53   #5
Super Moderator
 Маршал
Аватар для Тигрь
 
Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(
Регистрация: 05.05.2009
Сообщений: 875
Популярность: 48955
Золото Zhyk.Ru: 850
Сказал(а) спасибо: 155
Поблагодарили 739 раз(а) в 274 сообщениях
 
По умолчанию Re: Integer To Float :)

Цитата:
Сообщение от DinmaiteПосмотреть сообщение
ээээ. зачем?
Разве
Код:
procedure TForm2.btn2Click(Sender: TObject);
var
  i: integer;
  Float: Single;
begin
  i := 15;
  Float := i;
  Caption := Float.ToString;
end;
Не запишет именно 15?

Ну все верно, что то я подзатупил. Компилятор же сам приведение типов в данном случае делает.
________________
Продаю приват читы для AION Absolute, desteny 3.5, Legend, Cataclysm, Ru, EU, NA
Продаю многооконку на R2 Пишу читы на заказ под любые игры. Предложения в ЛС.
Все мои читы/программы/статьи тут:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).

Написал 2 или более раз одно и то же мне в личку - улетел в блок. Не умеешь пользоваться личными сообщениями, не видишь отправленные, твои проблемы. Учись пользоваться форумом.
  Ответить с цитированием
Старый 30.05.2014, 07:10   #6
 Разведчик
Аватар для y.u.s.i.k
 
y.u.s.i.k никому не известный тип
Регистрация: 12.04.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 1 сообщении
 
По умолчанию Re: Integer To Float :)

Код:
uses
  ....Math;

function NumToFloat(dwNum: DWORD): String;
const EXP_BIAS = 127;
var
Str: String;
dwFloat: Cardinal;
snglFloat: Single; // 4 байта
bySign, byExp: Byte;
dwFractPart: Cardinal;
snglFractPart: Single;
begin
dwFloat:= dwNum;
bySign:= (dwFloat shr 31) and $1;
byExp:= Byte((dwFloat shr 23) and $FF);
if byExp = $FF then
begin
//Result:= 'Infinity or Nan';
Result:= '0';
end
else
if byExp = $00 then
begin
//Result:= '0 (Zero) or Denormal';
Result:= '0';
end
else
begin
dwFractPart:= Cardinal( (  Cardinal(dwFloat shl 9) shr 9  ) );
snglFractPart:= 1.0 +
((dwFractPart shr 22) and $1) * 0.5 +
((dwFractPart shr 21) and $1) * 0.25 +
((dwFractPart shr 20) and $1) * 0.125 +
((dwFractPart shr 19) and $1) * 0.0625 +
((dwFractPart shr 18) and $1) * 0.03125 +
((dwFractPart shr 17) and $1) * 0.015625 +
((dwFractPart shr 16) and $1) * 0.0078125 +
((dwFractPart shr 15) and $1) * 0.00390625 +
((dwFractPart shr 14) and $1) * 0.001953125 +
((dwFractPart shr 13) and $1) * 0.0009765625 +
((dwFractPart shr 12) and $1) * 0.00048828125 +
((dwFractPart shr 11) and $1) * 0.000244140625 +
((dwFractPart shr 10) and $1) * 0.0001220703125 +
((dwFractPart shr 9) and  $1) * 0.00006103515625 +
((dwFractPart shr 8) and  $1) * 0.000030517578125 +
((dwFractPart shr 7) and  $1) * 0.0000152587890625 +
((dwFractPart shr 6) and  $1) * 0.00000762939453125 +
((dwFractPart shr 5) and  $1) * 0.000003814697265625 +
((dwFractPart shr 4) and  $1) * 0.0000019073486328125 +
((dwFractPart shr 3) and  $1) * 0.00000095367431640625 +
((dwFractPart shr 2) and  $1) * 0.000000476837158203125 +
((dwFractPart shr 1) and  $1) * 0.0000002384185791015625 +
( dwFractPart        and  $1) * 0.00000011920928955078125;
snglFloat:= Power(-1, bySign) * Power(2.0, (byExp - EXP_BIAS)) * snglFractPart;
Str:= FloatToStr(snglFloat);
end;
Result:= Str;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
    i:= 1148846080;
    Edit1.Text := NumToFloat(i);
    // результат 1000.0;
end;

end.
Вот что то подобное что я хотел )
у этой функции с нулями проблема.
Ах да забыл сказать что я пишу на Delphi 7
  Ответить с цитированием
Старый 30.05.2014, 08:37   #7
Super Moderator
 Маршал
Аватар для Тигрь
 
Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(
Регистрация: 05.05.2009
Сообщений: 875
Популярность: 48955
Золото Zhyk.Ru: 850
Сказал(а) спасибо: 155
Поблагодарили 739 раз(а) в 274 сообщениях
 
По умолчанию Re: Integer To Float :)

Цитата:
Сообщение от y.u.s.i.kПосмотреть сообщение
Код:
uses
  ....Math;

function NumToFloat(dwNum: DWORD): String;
const EXP_BIAS = 127;
var
Str: String;
dwFloat: Cardinal;
snglFloat: Single; // 4 байта
bySign, byExp: Byte;
dwFractPart: Cardinal;
snglFractPart: Single;
begin
dwFloat:= dwNum;
bySign:= (dwFloat shr 31) and $1;
byExp:= Byte((dwFloat shr 23) and $FF);
if byExp = $FF then
begin
//Result:= 'Infinity or Nan';
Result:= '0';
end
else
if byExp = $00 then
begin
//Result:= '0 (Zero) or Denormal';
Result:= '0';
end
else
begin
dwFractPart:= Cardinal( (  Cardinal(dwFloat shl 9) shr 9  ) );
snglFractPart:= 1.0 +
((dwFractPart shr 22) and $1) * 0.5 +
((dwFractPart shr 21) and $1) * 0.25 +
((dwFractPart shr 20) and $1) * 0.125 +
((dwFractPart shr 19) and $1) * 0.0625 +
((dwFractPart shr 18) and $1) * 0.03125 +
((dwFractPart shr 17) and $1) * 0.015625 +
((dwFractPart shr 16) and $1) * 0.0078125 +
((dwFractPart shr 15) and $1) * 0.00390625 +
((dwFractPart shr 14) and $1) * 0.001953125 +
((dwFractPart shr 13) and $1) * 0.0009765625 +
((dwFractPart shr 12) and $1) * 0.00048828125 +
((dwFractPart shr 11) and $1) * 0.000244140625 +
((dwFractPart shr 10) and $1) * 0.0001220703125 +
((dwFractPart shr 9) and  $1) * 0.00006103515625 +
((dwFractPart shr 8) and  $1) * 0.000030517578125 +
((dwFractPart shr 7) and  $1) * 0.0000152587890625 +
((dwFractPart shr 6) and  $1) * 0.00000762939453125 +
((dwFractPart shr 5) and  $1) * 0.000003814697265625 +
((dwFractPart shr 4) and  $1) * 0.0000019073486328125 +
((dwFractPart shr 3) and  $1) * 0.00000095367431640625 +
((dwFractPart shr 2) and  $1) * 0.000000476837158203125 +
((dwFractPart shr 1) and  $1) * 0.0000002384185791015625 +
( dwFractPart        and  $1) * 0.00000011920928955078125;
snglFloat:= Power(-1, bySign) * Power(2.0, (byExp - EXP_BIAS)) * snglFractPart;
Str:= FloatToStr(snglFloat);
end;
Result:= Str;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
    i:= 1148846080;
    Edit1.Text := NumToFloat(i);
    // результат 1000.0;
end;

end.
Вот что то подобное что я хотел )
у этой функции с нулями проблема.
Ах да забыл сказать что я пишу на Delphi 7

Это делается в одну строку с помощью указателей, взять не типизированный указатель от int разыменовать его и привести к типу single. Но пример давать не буду ибо работая с указателями человек должен четко представлять что он делает, иначе чреваты последствия. Либо делай через эту функцию, либо читай доки по указателям и разбираяся как осуществлять приведение типов через нетипизированные указатели(но нужно очень хорошо понимать что ты делаешь), либо делай как указал Dinmaite, зачем читать из файла в инт а потом преобразовывать во фроат, когда можно сразу считать во флоат и получить желаемый резальтат.
И такой вопрос чем обоснован выбор delphi 7?
________________
Продаю приват читы для AION Absolute, desteny 3.5, Legend, Cataclysm, Ru, EU, NA
Продаю многооконку на R2 Пишу читы на заказ под любые игры. Предложения в ЛС.
Все мои читы/программы/статьи тут:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).

Написал 2 или более раз одно и то же мне в личку - улетел в блок. Не умеешь пользоваться личными сообщениями, не видишь отправленные, твои проблемы. Учись пользоваться форумом.
  Ответить с цитированием
Старый 30.05.2014, 13:04   #8
 Разведчик
Аватар для y.u.s.i.k
 
y.u.s.i.k никому не известный тип
Регистрация: 12.04.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 1 сообщении
 
По умолчанию Re: Integer To Float :)

Цитата:
Сообщение от ТигрьПосмотреть сообщение
Это делается в одну строку с помощью указателей, взять не типизированный указатель от int разыменовать его и привести к типу single. Но пример давать не буду ибо работая с указателями человек должен четко представлять что он делает, иначе чреваты последствия. Либо делай через эту функцию, либо читай доки по указателям и разбираяся как осуществлять приведение типов через нетипизированные указатели(но нужно очень хорошо понимать что ты делаешь), либо делай как указал Dinmaite, зачем читать из файла в инт а потом преобразовывать во фроат, когда можно сразу считать во флоат и получить желаемый резальтат.
И такой вопрос чем обоснован выбор delphi 7?

Делфи 7 эту версию мне посоветовали, сказав что на ней легче учиться)))
слишком рано я ринулся в это дело пойду читать про указатели
Спасибо.
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Is not valid integer value Роспотребнадзор Вопросы и ответы, обсуждения 7 30.06.2012 18:47
[Помогите!] Integer to hex Skrillex3 Вопросы и ответы, обсуждения 2 23.03.2012 23:44

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 22:55.

Пишите нам: forum@zhyk.ru
Copyright © 2025 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net