Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

Метод округления в функции FloatToStrF   Найти похожие ветки 

 
Германн ©   (2010-05-12 02:01) [0]

Знает ли кто какой метод округления используется в функции FloatToStrF?

Д2007.

Совсем запутался. Никак не могу добиться одинакового представления на дисплее прибора и в программе, которая считывает из прибора данные.


 
Юрий Зотов ©   (2010-05-12 02:10) [1]

Так какой формат нужен-то?


 
Германн ©   (2010-05-12 02:22) [2]


> Юрий Зотов ©   (12.05.10 02:10) [1]
>
> Так какой формат нужен-то?
>

Любой. Лишь бы я знал какой он.

В приборе у меня используется только целочисленная арифметика. А вывод строковых представлений нецелых чисел в приборе реализован выводом на дисплей сепаратора в нужной позиции. В данной эксклюзивной версии прибора его изготовитель сильно урезал вывод на дисплей в плане количества знакомест. До двух или до трех. (Одно знакоместо всегда перед запятой).
Программа на РС получает то же целое число, которое используется при выводе на дисплей прибора. Дык не смог пока получить одно и то же строковое представление в приборе и на РС.
P.S.
Понимаю что это не очень понятно.


 
Юрий Зотов ©   (2010-05-12 02:25) [3]


> Понимаю что это не очень понятно.

Это совсем непонятно. Гораздо понятнее было бы что-то вроде этого: #.##


 
Германн ©   (2010-05-12 02:37) [4]


> Это совсем непонятно. Гораздо понятнее было бы что-то вроде
> этого: #.##
>

Попробую.

Программа для РС:
     k:=Ord(St[10])+Ord(St[11])*256;
     Panel8.Caption:=FloatToStrF(k/1000,ffFixed,2,1);


Программа прибора:
procedure Data1;
begin
 ...
 ...
 ...
 adr:=ch4;bdc;wrc:=$cf;ind51;
end;
 
Procedure bdc;        
Begin
 if adr=20000 then begin
   a3:=$58;a2:=$58;a1:=$58;a0:=$58;
 end else begin
   if (adr>9999) then adr:=9999;
   if (adr<0) then adr:=0;
   a0:=$30;a1:=$30;a2:=$30;a3:=$30;
   while(adr>999)do begin
     adr:=adr-1000;a3:=a3+1;
   end;
   WHILE(adr>99)do begin
     adr:=adr-100;a2:=a2+1;
   end;
   WHILE(adr>9)do begin
     adr:=adr-10;a1:=a1+1;
   end;
   a0:=LO(adr)+$30;
 end;
end;

Procedure ind51;
begin
 if a1 >= 5 then begin
   a2:=a2+1;
   if a2 = 10 then begin
     a2:=0;
     a3:=a3+1;
     if a3 = 10 then begin
       a3:=9;a2:=9;
     end;
   end;
 end;
 w;wrd:=a3;w;wrd:=46;w;wrd:=a2;w;
end;


Не уверен, что стало понятнее, тем более в такое время суток. :)


 
Юрий Зотов ©   (2010-05-12 02:46) [5]

Серег, не надо программ. Ты лучше нарисуй, что ты видешь на дисплее.


 
Германн ©   (2010-05-12 02:54) [6]


> Юрий Зотов ©   (12.05.10 02:46) [5]
>
> Серег, не надо программ. Ты лучше нарисуй, что ты видешь
> на дисплее.
>

На дисплее вижу "0.2". В программе вижу "0.3".

P.S.
Юра. По количеству потребляемой ежедневно глюкозы мне нет равных на сём форуме. И по способности её употреблять ежедневно тоже.


 
Германн ©   (2010-05-12 03:04) [7]

Ладно. Пока сдам прибор и программу в том виде, в котором они есть сейчас.
Техзаданию не противоречат, знать не мои проблемы.


 
Юрий Зотов ©   (2010-05-12 03:06) [8]

> Германн ©   (12.05.10 02:54) [6]

> На дисплее вижу "0.2". В программе вижу "0.3".

Это уже понятнее. А что на самом деле? Другим прибором можно замерить, более точным?


 
Германн ©   (2010-05-12 03:21) [9]


> Юрий Зотов ©   (12.05.10 03:06) [8]
>
> > Германн ©   (12.05.10 02:54) [6]
>
> > На дисплее вижу "0.2". В программе вижу "0.3".
>
> Это уже понятнее. А что на самом деле? Другим прибором можно
> замерить, более точным?
>


 
Германн ©   (2010-05-12 03:28) [10]


> Юрий Зотов ©   (12.05.10 03:06) [8]
>
> > Германн ©   (12.05.10 02:54) [6]
>
> > На дисплее вижу "0.2". В программе вижу "0.3".
>
> Это уже понятнее. А что на самом деле? Другим прибором можно
> замерить, более точным?

Юра. А что если тебе приехать ко мне в гости? Там бы и я познакомил тебя со своей семьёй. И мы бы обсудили сей вопрос. А так же вопрос о "глюкозе в крови". :)
P.S. Смайлик относится только к последней моей фразе.


 
Германн ©   (2010-05-12 04:41) [11]


> Юра. А что если тебе приехать ко мне в гости?

А уж сколько всего у меня в баре за спиной!
Вам и не снилось!


 
turbouser ©   (2010-05-12 08:59) [12]


> Германн ©   (12.05.10 04:41) [11]

uses Math
SetRoundMode ?


 
Alx2 ©   (2010-05-12 09:24) [13]

Если я правильно понял тему, то для того чтобы знать "как" можно попробовать указать "как именно надо". Это пригодится в т.ч., если "кто-то чужой" установит свои правила по округлению.
В доке Intel по FPU есть часть по режимам округления в сопроцессоре (через управляющий регистр, загрузка модификация которого по fnstcw / fldcw ). Не знаю, есть ли прямые аналоги в Delphi (под рукой нет чтобы проверить), но судя по посту  turbouser ©   (12.05.10 08:59) [12] - таки есть.


 
Anatoly Podgoretsky ©   (2010-05-12 09:44) [14]

> Германн  (12.05.2010 02:22:02)  [2]

А округление причем, используй IntToStr и вставляй также запятую в нужной
позиции.


 
Плохиш ©   (2010-05-12 12:16) [15]


> Германн ©   (12.05.10 02:54) [6]

> На дисплее вижу "0.2". В программе вижу "0.3".

Подозреваю, что прибор просто отбрасывает ненужные разряды и никакого округления.


 
Германн ©   (2010-05-12 14:09) [16]


> Подозреваю, что прибор просто отбрасывает ненужные разряды
> и никакого округления.
>

Так и было раньше. Теперь попробовал добавить округление.


 
RWolf ©   (2010-05-12 14:20) [17]

было бы разумно сделать представление данных одинаковым в обеих программах (скажем, фиксированная точка, как в приборе), тогда результаты автоматически стали бы совпадать.


 
Германн ©   (2010-05-12 14:37) [18]


> было бы разумно сделать представление данных одинаковым
> в обеих программах

Было бы разумным при этом сделать это представление грамотным. Чего я и хотел. Чего в результате и добился проверив алгоритм округления введенный в прибор. Такого ляпа я уже давно не делал! Спутать цифру с её символом. Просто стыдно.


 
tesseract ©   (2010-05-12 16:16) [19]


> Спутать цифру с её символом. Просто стыдно.


Я вот помню у одного такого "прибора" CRC ковырял...... Вот это было весело. А цифры он выдавал в кодах шифратора дисплея:-) Ну не оттудова прилепили наши.


 
Кто б сомневался ©   (2010-05-12 17:44) [20]


> Германн ©   (12.05.10 14:37) [18]


Не поэтому ли взрываются?


 
Jeer ©   (2010-05-12 20:17) [21]


> Кто б сомневался ©   (12.05.10 17:44) [20]
> Не поэтому ли взрываются?


Не поэтому, но в том числе.

"ВПК на вас нет, дятлы" (С)


 
Германн ©   (2010-05-13 01:16) [22]


> Не поэтому, но в том числе.
>

Не. Не "в том числе". Ошибка, найденная на этапе отладки, ошибкой не является.

P.S.
Очень тяжело менять что-то радикально в программе написанной 12 лет назад. Особенно если некоторые процедуры написаны кем-то другим. :)


 
silver ©   (2010-05-13 14:09) [23]


> Очень тяжело менять что-то радикально в программе написанной
> 12 лет назад.

нихрена у тебя отладка


 
Jeer ©   (2010-05-13 15:54) [24]


> Очень тяжело менять что-то радикально в программе написанной
> 12 лет назад


Подумаешь - парой шахт больше, парой меньше, зато отладка тщательно идет и уже 12 лет.


 
tesseract ©   (2010-05-13 16:31) [25]


> зато отладка тщательно идет и уже 12 лет.


Я помню решали здесь с кем-то вопрос о датчиках давления в нефтяных трубах в Сибири. Прошло 8 лет - вроде не текут :-)


 
turbouser ©   (2010-05-13 16:36) [26]


> tesseract ©   (13.05.10 16:31) [25]


> Я помню решали здесь с кем-то вопрос о датчиках давления
> в нефтяных трубах в Сибири

Точно в Сибири?


 
Jeer ©   (2010-05-13 16:39) [27]


> Прошло 8 лет - вроде не текут :-)


Это в Сибири не текут, зато текут куда надо владельцам :)


 
tesseract ©   (2010-05-13 16:44) [28]


> Точно в Сибири?


Точно не помню :-)


 
Anatoly Podgoretsky ©   (2010-05-13 16:48) [29]

> tesseract  (13.05.2010 16:31:25)  [25]

Так еще четыре года в запасе.


 
Германн ©   (2010-05-14 02:09) [30]


> silver ©   (13.05.10 14:09) [23]


> Jeer ©   (13.05.10 15:54) [24]


> turbouser ©   (13.05.10 16:36) [26]

Понимаю ваши шуточки. Сам бы пошутил в подобной ситуации.

Только.

Во-первых сей прибор не рассчитан на использование в системах "аварийного оповещения и аварийного реагирования". Прибор в основной версии используется для анализа "КПД сжигания топлива" на ТЭЦ. И т.п.

Во-вторых, прибор продаётся все эти 12 лет почти в неизменном виде. Но за эти 12 сделаны некоторые улучшения, которые пожелали пользователи.

В-третьих, иногда кто-то заказывает эксклюзивные версии прибора. И вот тут возникают порой сложности.


 
Германн ©   (2010-05-14 02:43) [31]


> Юрий Зотов ©   (12.05.10 02:46) [5]
>
> Серег, не надо программ.

Может всё-таки заглянешь в гости?
Такое количество коньяка пропадает даром! Я ведь "не пью один"!
Шутка. Но и не совсем.
Поскольку Грибоедов сменился на Савёлу.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.06 c
2-1268575722
vovka-x13
2010-03-14 17:08
2010.08.27
Определение текущей страницы в браузера


2-1268353155
Женя
2010-03-12 03:19
2010.08.27
связанные таблицы


15-1270833793
turbouser
2010-04-09 21:23
2010.08.27
Из не отправленного :)


15-1274221434
Германн
2010-05-19 02:23
2010.08.27
Документация.


15-1274905785
Юрий
2010-05-27 00:29
2010.08.27
С днем рождения ! 27 мая 2010 четверг





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский