Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Типы даных
Форум программистов > Системное программирование > C, С++ и С Builder > Borland C++ Builder & Kylix
dr.SeM
Здраствуйте!
У меня следующая проблема:
когда к переменной типа 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
Цитата(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
Спасибо! smile.gif
YAUHEN
хотя ответ уже есть, но всё же:
Memo->Lines->Add(FloatToStrF(stop,ffFixed,8,2));
8-количество цифр,2-количество цифр после запятой
European
Цитата(YAUHEN @ 17:05:2008 - 19:01) *
Memo->Lines->Add(FloatToStrF(stop,ffFixed,8,2));

Это очень специфическое решение, т.к. им нигде кроме Билдера воспользоваться не удастся
gamecreator
не нужно использовать float. это глючный тип.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2008 IPS, Inc.