Главная категория > Компьютеры, сканеры ШК, Клавиатуры, принтеры и ПО и т.д.

проблема с типом float.

(1/5) > >>

tridentxp:
есть кусок кода ниже. вот: если переменную "a" объявить unsigned int, то в окне получим округлённое значение типа float, а если её объявить float - ом то всё идёт отлично. чо за беда ?
//---------------------------------------------------------------------------

void __fastcall TForm1::frequencyChange(TObject *Sender)
{float f,f1,freq;

unsigned int a;
AnsiString s;
for(a=1;a<11;a++)if ((frequency->Text[a])!='.') s+=frequency->Text[a];
freq=StrToFloat(s);if (freq==0) goto end;
a=60000000/freq;
f=60000000/a;f1=60000000/(a+1);
  if ( (freq-f)>(freq-f1) ) f=f1;
actual_freq->Caption="Actual frequency : "+ FloatToStr(f); //
end:
}
//---------------------------------------------------------------------------

SkaT:
Наверное как обычно, в математической операции (любой) нужно применять переменные (константы) одного типа, иначе компилятор начнет преобразовывать тип по своему усмотрению. Соответственно результат будет отличаться от "ожидаемого".

tridentxp:
ну да, по ходу это и произошло, может просто есть какие типичные настройки, запрещающие преобразование типа?...

SkaT:
Не, это наврядли.
Попробуй указатели типа, может прокатит.
Не помню где используются, в голове каша.
ну типа: f=60000000.0/(float)a
Или что-то в этом духе.

Prz777:
Переменную а необходимо объявить float, т.к. она получается результатом деления a=60000000/freq; А потом если нужно получить целое применить округление.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Произошла ошибка благодарности
Думаю...
Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 
Перейти к полной версии