Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2010, 15:24   #1
mirvsem
Новичок
Джуниор
 
Регистрация: 26.03.2010
Сообщений: 2
По умолчанию double to hex

157,453796 = hex 18068A
157,455093 = hex 180697
71,5037 = hex E91D00
71,506104 = hex E93500
71,507103 = hex E93F00
0 = hex 000000
подскажите по какому алгоритму происходит преобразование?
я смотрел здесь на форуме тему про IEEE-754, но это не то.
Прошу кто грамотный в этом деле, помогите разобраться.
mirvsem вне форума Ответить с цитированием
Старый 26.03.2010, 16:39   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Это неправда, эти числа не равны, кроме последнего.
Например $18068A = 1574538, а не 157,453796

Походу, здесь число умножается на 10000, округляется и потом переводиться в Hex.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 26.03.2010 в 16:42.
mutabor вне форума Ответить с цитированием
Старый 26.03.2010, 16:59   #3
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Похоже это currency
(Currency values are automatically divided or multiplied by 10000).

Код:
var a:currency;
    b:int64;
begin
   b := $18068A;
   a := PCurrency(PInt64(@b))^;
   writeln(a);     // 157,4538
   readln;
alexBlack вне форума Ответить с цитированием
Старый 26.03.2010, 17:34   #4
mirvsem
Новичок
Джуниор
 
Регистрация: 26.03.2010
Сообщений: 2
По умолчанию

Цитата:
Сообщение от alexBlack Посмотреть сообщение
Похоже это currency
(Currency values are automatically divided or multiplied by 10000).

Код:
var a:currency;
    b:int64;
begin
   b := $18068A;
   a := PCurrency(PInt64(@b))^;
   writeln(a);     // 157,4538
   readln;
Приогромнешнее спасибо, а то думал что девайс китайский без дров не присоеденить к компьютеру. Еще раз огромное вам спасибо.

Если не трудно как решить обратную задачу зная double получить HEX?
mirvsem вне форума Ответить с цитированием
Старый 26.03.2010, 19:16   #5
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Да также. Могли бы и сами догадаться:

Код:
var a:currency;
    b:int64;
begin
   a := 157.4538;
   b := PInt64(PCurrency(@a))^;
   writeln(IntToHex(b, 4));     // $18068A;
   readln;
alexBlack вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
E2015 Ambiguity between 'std::log(double)' and 'std::log(long double)' Namolem Помощь студентам 3 02.04.2011 20:22
String to double ? NiCola999 Общие вопросы C/C++ 3 14.03.2010 12:21
double -> Время bobik C++ Builder 2 23.09.2009 17:08
long double vs. double VoidMan Общие вопросы C/C++ 1 21.09.2009 18:45
Double/? Viteef Общие вопросы Delphi 6 25.07.2007 02:28