Главная категория > Компьютеры, сканеры ШК, Клавиатуры, принтеры и ПО и т.д.
проблема с типом float.
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; А потом если нужно получить целое применить округление.
Навигация
Перейти к полной версии