Типы даных

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем dr.SeM, 5 апр 2008.

Статус темы:
Закрыта.
  1. dr.SeM

    dr.SeM Гость

    Здраствуйте!
    У меня следующая проблема:
    когда к переменной типа float прибавить несколько раз скажем 0,01 результат получаеться скакамито лишними цифрами. К примеру код:
    Код (Text):
    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 и так далее?
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Это не лишние цифры, это погрешность округления из-за ограниченной точности представления чисел.
    round( x * 100 ) / (float)100
     
  3. dr.SeM

    dr.SeM Гость

    Спасибо! :)
     
  4. YAUHEN

    YAUHEN Гость

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Это очень специфическое решение, т.к. им нигде кроме Билдера воспользоваться не удастся
     
  6. gamecreator

    gamecreator Гость

    не нужно использовать float. это глючный тип.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей