Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум программистов _ Borland C++ Builder & Kylix _ Типы даных

Автор: dr.SeM 5:04:2008, 16:41

Здраствуйте!
У меня следующая проблема:
когда к переменной типа float прибавить несколько раз скажем 0,01 результат получаеться скакамито лишними цифрами. К примеру код:

Код
float inc;
float stop;
stop=0;
inc=StrToFloat(Edit1->Text.c_str());
do
        {
        stop=stop+inc;
        M->Lines->Add(stop);   //TMemo
        }while (stop<50);

результат для первых 3-х проходов цикла будет :0,00999999977648258;0,0199999995529652;0,0299999993294477;
Может их нужно округлить?Но как ето сделать, при етом мне нужен точный результат скажем 0,01; 0,02 и так далее?

Автор: European 7:04:2008, 07:26

Цитата(dr.SeM @ 5:04:2008 - 18:41) *
результат получаеться скакамито лишними цифрами.

Это не лишние цифры, это погрешность округления из-за ограниченной точности представления чисел.
Цитата(dr.SeM @ 5:04:2008 - 18:41) *
Но как ето сделать, при етом мне нужен точный результат скажем 0,01; 0,02 и так далее?

round( x * 100 ) / (float)100

Автор: dr.SeM 7:04:2008, 14:22

Спасибо! smile.gif

Автор: YAUHEN 17:05:2008, 17:01

хотя ответ уже есть, но всё же:
Memo->Lines->Add(FloatToStrF(stop,ffFixed,8,2));
8-количество цифр,2-количество цифр после запятой

Автор: European 17:05:2008, 18:30

Цитата(YAUHEN @ 17:05:2008 - 19:01) *
Memo->Lines->Add(FloatToStrF(stop,ffFixed,8,2));

Это очень специфическое решение, т.к. им нигде кроме Билдера воспользоваться не удастся

Автор: gamecreator 17:05:2008, 20:05

не нужно использовать float. это глючный тип.

Русская версия Invision Power Board (http://www.nulled.ws)
© Invision Power Services (http://www.nulled.ws)