05.11.2009, 12:10 | #1 |
Участник
|
num2hex
День добрый всем. Может быть заморачивался кто-то конвертацией в Аксапте вещественного числа в hex? Можно ли это как-то реализовать без извращений?
|
|
05.11.2009, 12:11 | #2 |
Участник
|
Не в том подфоруме создал вопрос, перенесите пожалуйста.
Последний раз редактировалось Gustav; 05.11.2009 в 12:51. Причина: перенес в "Программирование" |
|
05.11.2009, 12:15 | #3 |
Участник
|
Хмм. А нафига real в hex? В Global есть int2hex.
Посути, из интов в основном и конвертируют |
|
05.11.2009, 12:18 | #4 |
Участник
|
ну вот мне понадобилось из num`ов. Простой пример, число 1.2 в hex
|
|
05.11.2009, 12:41 | #5 |
Боец
|
А какая задача? И с какой точностью хранить значения нужно?
Может хранить, приводя к целочисленному виду Т.е. 1) нам нужно сохранить 1.2 2) Умножаем 1.2*10 = 12; Hex(12) = 0С -> сохраняем 3) При использовании достаем 0С, делим на 10, получаем 1.2 Здесь используется 10, если нужно хранить с точностью до 0.1 |
|
05.11.2009, 12:45 | #6 |
Участник
|
Мне так не подойдет, мне потом эти значения нужно в файл загонять. Т.е. именно 1.2 нужно представить в hex. Точность - достаточно 0.01
|
|
05.11.2009, 13:35 | #7 |
MCTS
|
Хохмы ради набросал джобик конверсии дробовой части в hex
As is... Если есть ошибки отладить можете черпая инфу из http://en.wikipedia.org/wiki/Hexadecimal параграф Real numbers Вы же этот дробовой hex в файле в текстовом виде собираетесь хранить? Если ответите, что нет, я упаду со стула X++: static void Job54(Args _args) { real r = 1/17; real rr; int ir; Counter c; str s; str i2h(int _i) { str _s; ; switch(_i) { case 0:_s="0";break; case 1:_s="1";break; case 2:_s="2";break; case 3:_s="3";break; case 4:_s="4";break; case 5:_s="5";break; case 6:_s="6";break; case 7:_s="7";break; case 8:_s="8";break; case 9:_s="9";break; case 10:_s="A";break; case 11:_s="B";break; case 12:_s="C";break; case 13:_s="D";break; case 14:_s="E";break; case 15:_s="F";break; } return _s; } ; c = 0; s= "0."; while (c<10) { rr = 16*r; ir = rr; r = rr-ir; c++; // info(strFmt("%1", i2h(ir))); s+=i2h(ir); } info(strFmt("%1", s)); }
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
05.11.2009, 13:38 | #8 |
Участник
|
Конечно в тексте. Падать не нужно =). Сейчас проверю.
|
|
06.11.2009, 11:10 | #9 |
Участник
|
Джоб работает не совсем корректно. Решение было найдено. Бросаем ораклу запрос:
select sys.utl_raw.cast_from_binary_double(6.5) from dual в ответ получаем нужную нам строку. |
|
06.11.2009, 11:11 | #10 |
MCTS
|
А где он там спотыкается?
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
06.11.2009, 14:45 | #11 |
Участник
|
А на SQL Server схожий код имеется?
|
|
06.11.2009, 14:45 | #12 |
Участник
|
суньте число в binary и потом делайте что хотите
X++: static void Job22(Args _args) { binary b = new binary(8); ; b.double(0, 1.12345); info(strfmt("%1", b.byte(0))); info(strfmt("%1", b.byte(1))); info(strfmt("%1", b.byte(2))); info(strfmt("%1", b.byte(3))); info(strfmt("%1", b.byte(4))); info(strfmt("%1", b.byte(5))); info(strfmt("%1", b.byte(6))); info(strfmt("%1", b.byte(7))); }
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy |
|
|
За это сообщение автора поблагодарили: greench (1), DSPIC (2). |
06.11.2009, 15:01 | #13 |
Участник
|
точно, только нужно не забыть потому к каждому элементу применить int2hex
|
|
06.11.2009, 16:09 | #14 |
Участник
|
Вернее не так, если загонять потом в файл, то ничего делать не нужно. Если посмотреть потом в Аксапте, то int2hex.
|
|