Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Функция FloatToStrF, изменяемые параметры


Автор: Нитонисе 17.3.2010, 18:26
Преобразовываю некоторое число в строку
Код

AnsiString str = FloatToStrF(number,ffFixed,7,0);

Округление идет до целого.

А допустим в зависимости от неких настроек мне это число нужно получать с округлением до 1 знака после запятой.
Код

if (Okrulenie0->Checked)
  AnsiString str = FloatToStrF(number,ffFixed,7,0);
if (Okrulenie1->Checked)
  AnsiString str = FloatToStrF(number,ffFixed,7,1);


Все хорошо когда такое число всего одно, но когда их в программе сотня и они разбросаны по всему коду, то это становится проблемой. Как оформить это преобразование с изменяемыми параметрами? Тогда программа могла бы выглядеть так
Код

int i;
if (Okrulenie0->Checked)
  i = 0;
if (Okrulenie1->Checked)
  i = 1;

AnsiString str = FloatToStrF(number,ffFixed,7,i);


Как бы так сделать?

P.S. Okruglenie0 и Okruglenie1 - это переключатели чекбокс.

Автор: vikaz 17.3.2010, 18:40
создать функцию, что-то типо того:
Код

AnsiString Convert (float Buf, bool flag)
{
 if (flag) return FloatToStrF(Buf,ffFixed,7,0);
else FloatToStrF(Buf,ffFixed,7,1);
}


Работать с ней можно так!
Код


Edit2->Text = Convert (number, Okrulenie0->Checked);

Надеюсь я правильно тебя понял!

Автор: Нитонисе 17.3.2010, 19:43
vikaz, идея неплохая, надо обмыслить и попробовать применить. Смущает только создание дополнительной функции.

Автор: vikaz 17.3.2010, 20:04
Конечно, если такое преобразование и проверка осуществляется всего несколько раз, то смысла нет! Но если этим придется пользоваться часто, то почему бы и нет!  smile 

кстати, можно еще краше сделать! Объявить эту строку в самом начале файле, где #include'ы....
Код

inline AnsiString Convert (float Buf, bool Flag) {return Flag ? FloatToStrF(Buf,ffFixed,7,0) :FloatToStrF(Buf,ffFixed,7,1);}

А работать с ней, как с обычной функцией!


Автор: Нитонисе 18.3.2010, 21:34
vikaz, ваш вариант мне отлично подошел. Пусть и появилась еще одна функция, но она совсем не напрягает. Во всяком случае это намного лучше чем те решения, что приходили мне в голову) Спасибо.

Автор: vikaz 18.3.2010, 22:22
Пожалуйста!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)