Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#16: 2013-09-26 11:59:40 ЛС | профиль | цитата
Вернусь ещё раз.
Aziz писал(а):
Затем через реестр котировки в текстовом формате из терминала ввожу в прогу
(выделено мной).
Aziz писал(а):
мне нужно именно преобразование real->string
откуда у тебя взялось REAL, если ты получаешь STRING ?
Aziz писал(а):
Нужно для того чтобы посчитать число знаков после точки
Элементарно:
code_31904.txt
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_31904.txt [1.1KB] [210]
Ответов: 1291
Рейтинг: 47
#17: 2013-09-26 13:38:52 ЛС | профиль | цитата
Aziz писал(а):
Просто компонент Grafer3 (см. раздел модов компонентов) делает выборку в массив real.

Чтоб не размножать массивы и экономить память.

Tad, спасибо, но это тоже работа со строками у тебя. А я пытался выудить из типа Real информацию которую он совершенно не носит и не обязан носить в себе - незначащие нули. Это глупо и было тупиковое мое заблуждение.. Вроде как сделать квадрат еще квадратнее. Отдыхать чаще нужно наверное. Ну а вы чего молчали? Господа программеры. Но спасибо Tad вывел меня из опасного ступора и я пошел окольным и легким, но как оказалось единственно верным путем - путем увеличения избыточности информации, путем создания строкового массива параллельно дробному, перестав искать черную кошку которой нет в черной комнате - сохранение незначащих нулей в типе Real. Но ничего хоть узнал побольше об этом типе, что например, он устарел уже и лучше использовать Double.

У меня этих схем уже коллекция - вагон и тележка: )) Собрал в одну кучу:

Add(Button,1448047,210,245)
{
Top=30
Data=Real(1.2)
link(onClick,726730:doTest,[])
}
Add(InlineCode,726730,280,245)
{
WorkPoints=#6:doTest|
EventPoints=#5:onRes|
DataPoints=#3:str|
Code=#15:unit HiAsmUnit;|13:// Author Tad|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|20:// vr : TData;|9: public|9: str,|23: onRes : THI_Event;|51: PROCEDURE doTest(var _Data:TData; Index:Word);|0:|5: end;|0:|14:implementation|0:|29:PROCEDURE THiAsmClass.doTest;|14: var s:string;|5:BEGIN|23: s:=toStringEvent(str);|22: _hi_onEvent(onRes,s);|4:END;|0:|0:|4:end.|
link(onRes,13167314:doText,[])
link(str,4882742:Text,[])
}
Add(Edit,4882742,280,189)
{
Top=5
Width=100
Text="1,234000"
}
Add(Label,13167314,350,245)
{
Left=60
Top=30
}
Add(ConvertorEx,11198504,259,329)
{
Mode=15
}
Add(InlineCode,15940586,630,301)
{
WorkPoints=#6:doWork|
EventPoints=#5:onRes|
DataPoints=#6:Number|6:Width |9:Decimals |
Code=#15:unit HiAsmUnit;|17:// Tad 2011.11.25|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|10: Number,|10: Width, |13: Decimals, |19: onRes:THI_Event;|48: Procedure doWork(var _Data:TData;Index:Word);|5: end;|0:|14:implementation|29:Procedure THiAsmClass.doWork;|15:var a :Double;|17: b,c:Integer; |16: text: string;|0:|5:Begin|27: a:=ReadReal(_Data,Number);|26: b:=toIntegerEvent(Width);|30: c:=toIntegerEvent(Decimals); |17: Str(a:b:c,text);|25: _hi_onEvent(onRes,text);|4:End;|4:end.|
link(onRes,11942362:doAdd,[])
link(Width ,16048682:Text,[(643,285)(615,285)])
link(Decimals ,15141932:Text,[(650,285)(664,285)])
}
Add(Button,13672642,539,301)
{
Left=15
Top=85
Width=100
Caption="123"
Data=Integer(123)
link(onClick,8159469:doWork2,[])
}
Add(ListBox,11942362,700,301)
{
Left=120
Top=10
Width=115
Height=220
Font=[Fixedsys,8,0,0,204]
}
Add(Button,8692909,539,252)
{
Left=15
Top=120
Width=100
Caption="1234.56789"
Data=String(1234.56789)
link(onClick,8159469:doWork1,[(592,258)])
}
Add(HubEx,8159469,588,301)
{
link(onEvent,15940586:doWork,[])
}
Add(VisualStrings,16048682,609,252)
{
Lines=#2:10|
}
Add(VisualStrings,15141932,658,252)
{
Lines=#1:2|
}
Add(Button,6931925,798,308)
{
Left=275
Top=210
Width=100
Caption="123"
Data=Integer(123)
link(onClick,7178742:doEnum,[])
}
Add(ListBox,9792984,1057,308)
{
Left=400
Top=10
Width=115
Height=220
Font=[Fixedsys,8,0,0,204]
}
Add(ConvertorEx,9617692,945,308)
{
Mode=15
Decimals=4
link(onResult,5361342:doReplace,[])
}
Add(ListBox,9434044,868,203)
{
Left=280
Top=10
Width=110
Height=185
Strings=#5:1.230|5:0.120|6:12.340|6:14.567|6:15.000|7:210.234|0:|
}
Add(ArrayEnum,7178742,882,308)
{
link(onItem,9617692:doConvert,[])
link(Array,9434044:Array,[])
}
Add(Replace,5361342,1001,308)
{
SubStr="."
link(onReplace,9792984:doAdd,[])
}
Add(MainForm,2953706,126,105)
{
Width=558
Height=385
}
Add(InlineCode,16135437,1218,280)
{
WorkPoints=#6:doTest|
EventPoints=#5:onRes|
Code=#15:unit HiAsmUnit;|13:// Author Tad|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|4: |24: onRes : THI_Event;|51: PROCEDURE doTest(var _Data:TData; Index:Word);|0:|5: end;|0:|14:implementation|0:|29:PROCEDURE THiAsmClass.doTest;|13:var s:string;|11: z:word;|5:BEGIN|39: s:=toString(_Data); // получаем строку|65: z:=Length(CopyEnd(s,Pos('.',s)+1)); // число знаков после точки |22: _hi_onEvent(onRes,z);|4:END;|0:|0:|4:end.|
link(onRes,2081365:doText,[])
}
Add(Button,5560753,1141,273)
{
Left=25
Top=295
Data=String(1.2000)
link(onClick,15130386:doEvent1,[])
}
Add(Label,2236225,1218,238)
{
Left=240
Top=275
}
Add(Hub,15130386,1183,273)
{
link(onEvent1,2236225:doText,[(1207,279)(1207,244)])
link(onEvent2,16135437:doTest,[])
}
Add(Label,10023389,1141,238)
{
Left=110
Top=275
Width=95
Height=50
Caption="Число\r\n\r\nЗнаков после ".""
AutoSize=1
Alignment=1
}
Add(Label,2081365,1288,280)
{
Left=240
Top=300
}

карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 8930
Рейтинг: 823
#18: 2013-09-26 13:51:39 ЛС | профиль | цитата
Aziz писал(а):
Чтоб не размножать массивы и экономить память

Задача достойная, особенно при памяти измеряемой в Гигабайтах и диске в Терабайтах
карма: 19

0
Ответов: 1291
Рейтинг: 47
#19: 2013-09-26 13:54:29 ЛС | профиль | цитата
Леонид, я понял что я перфекционист и мечтатель - даже в программировании..))
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 16884
Рейтинг: 1239
#20: 2013-09-26 14:29:37 ЛС | профиль | цитата
Aziz писал(а):
Чтоб не размножать массивы и экономить память.
Леонид писал(а):
Задача достойная, особенно при памяти измеряемой в Гигабайтах
А ведь именно задача достойная. Даже "при памяти измеряемой в Гигабайтах" есть предел.
Aziz, для экономии памяти (например- при 4-х знаках после запятой) real*10000 и храним в integer array.
О программах, работающих с "живыми деньгами"
Удивительно, но такое простое число, как 0,1, записывается в расширенном формате IEEE с некоторой погрешностью, пусть очень небольшой. Из-за этого представление с плавающей запятой оказывается несколько неудобным для программ, в которых сохраняется и выводится фиксированное число десятичных разрядов численных значений. Это относится и к программам, работающим с 'живыми" деньгами.
Для частичного решения этой проблемы в Object Pascal определены два формата с фиксированной запятой. Тип Comp (computational — вычислительный) содержит только целые числа в диапазоне от -263+1 до 263-1, что примерно соответствует диапазону от —9,2х1018 до 9,2х1018. При программировании операций с американской валютой разработчикам обычно приходится искать естественный способ записи денежных сумм, в котором целая часть числа определяет количество долларов, дробная — центов. Если такие значения записывать в переменные типа Comp, придется представлять их в виде целого числа центов. В этом случае следует умножать значение на 100 для обращения центов в доллары, а затем делить на 100, чтобы снова получить центы.
Этих забот можно избежать, если воспользоваться типом Currency. В этом случае задачу выбора масштаба возьмет на себя компилятор. Физически значения Currency записываются в память того же объема, что и Comp, как целые числа, однако компилятор не забывает вовремя разделить значение на 10 000 (не на 100!) для его приведения в соответствие с денежным знаком и умножить на 10 000 перед записью в память. Это обеспечивает абсолютную точность в четыре десятичных знака после запятой.
Delphi так и делает, если использовать тип Currency
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1291
Рейтинг: 47
#21: 2013-09-26 14:49:40 ЛС | профиль | цитата
Хорошая идея.) Тип string насколько мне известно - самый расточительный..
Да, именно этим мне эта задачка понравилась. Но не все так просто - 4-х знаков для Форекса недостаточно - давно уже появились брокеры с 5-значными котировками, более точными и выгодными для мелких торговцев-скальперов. Тут наверное Currency не поможет.
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Гость
Ответов: 17029
Рейтинг: 0
#22: 2013-09-26 14:57:08 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2025-01-10 20:47:55
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#23: 2013-09-26 15:07:10 ЛС | профиль | цитата
Aziz писал(а):
давно уже появились брокеры с 5-значными котировками
0-ми приводищь к 5-ти знакам и умножаешь на 100 000.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#24: 2013-09-26 15:15:23 ЛС | профиль | цитата
Tad писал(а):
0-ми приводищь к 5-ти знакам и умножаешь на 100 000

А разве при умножении на 100 000, 0-ли не добавятся сами
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#25: 2013-09-26 15:43:28 ЛС | профиль | цитата
Aziz, уже и меня запутал.
217.24.189.52, в HiAsm не всё работает.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Гость
Ответов: 17029
Рейтинг: 0
#26: 2013-09-27 06:01:39 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2025-01-10 20:47:56
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#27: 2013-09-27 09:31:36 ЛС | профиль | цитата
217.24.189.52, ну и что тут ссылки на printf делают?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 8930
Рейтинг: 823
#28: 2013-09-27 12:26:36 ЛС | профиль | цитата
Aziz писал(а):
..4-х знаков для Форекса недостаточно..
Любители легкой наживы слетаются как мухи на г.., ой, на мёд даже и не думая о физических законах, сформулированных ещё Ломоносовым "..в одном месте прибавится, в другом убавится..".
Aziz, ну и как Вы думаете, где будет убавляться?
карма: 19

0
Ответов: 1291
Рейтинг: 47
#29: 2013-09-27 17:22:53 ЛС | профиль | цитата
[offtop]Леонид, тема в общем-то о другом, но если хотите содайте тему, обсудим. Моральное обоснование работы трейдера я специально изучал, хотя я такой же трейдер как и программист.)[/offtop]



карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
29
Сообщение
...
Прикрепленные файлы
(файлы не залиты)