Автор: 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
Автор: 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. это глючный тип.