Russian Qt Forum

Программирование => С/C++ => Тема начата: Firefox от Сентябрь 29, 2009, 22:19



Название: как ограничить float?
Отправлено: Firefox от Сентябрь 29, 2009, 22:19
Пишу программу. в ней есть математические вычисления. результат в формате Float, как ограничить его, например двумя числами после запятой. сразу оговорюсь перевод в строчную форму или варианты с выводом на экран мне не подходят.  ;D


Название: Re: как ограничить float?
Отправлено: _OLEGator_ от Сентябрь 29, 2009, 22:25
qRound(value * 100) / 100


Название: Re: как ограничить float?
Отправлено: Barmaglodd от Сентябрь 30, 2009, 08:51
qRound(value * 100) / 100
Ага, и получим целочисленный результат без дробной части.


Название: Re: как ограничить float?
Отправлено: Firefox от Сентябрь 30, 2009, 12:03
решила попробовать кустарным методом, но не понимаю почему не выходит.
Код:
float mass[2][100];
QString str;
for (int i=0;i<100;i++)
{
mass[0][i]=0;
mass[1][i]=0;
}
mass[0][0]=0.045;
mass[1][0]=20*log10(mass[0][0]/0.45);
for (int i=1;i<100;i++)
{
mass[0][i]=mass[0][i-1]+0.225;
mass[1][i]=20*log10(mass[0][i]/0.45);
str.sprintf("%4.2f",mass[1][i]);
mass[1][i]=str.toFloat();
}
но цифры как были гигантскими так и остались. попробовала тоже в отдельной програмке с переменной всё сработало.в чём проблема?


Название: Re: как ограничить float?
Отправлено: Igors от Сентябрь 30, 2009, 12:40
#include <math.h>

inline float RoundFloat( float x, int numSign = 2 )
{
  float fract, big, bias;
  fract = modf(x, &big);
  bias = pow(10.0f, numSign);
  return big + int(part * bias) / bias;
}


Название: Re: как ограничить float?
Отправлено: Firefox от Сентябрь 30, 2009, 18:51
Спасибо всем за советы))


Название: Re: как ограничить float?
Отправлено: _OLEGator_ от Сентябрь 30, 2009, 21:21
qRound(value * 100) / 100
Ага, и получим целочисленный результат без дробной части.

Так не получим:
Код
C++ (Qt)
qRound(value * 100) / 100.0
или
Код
C++ (Qt)
(float)qRound(value * 100) / 100


Название: Re: как ограничить float?
Отправлено: Igors от Сентябрь 30, 2009, 21:44
Код
C++ (Qt)
(float)qRound(value * 100) / 100
А если ее float выходит за диапазон int?
float  1.0e+37
int     2Gb (1.0e+9)

Если нет, лучше смотрится
qRound(value * 100) / 100.0f


Название: Re: как ограничить float?
Отправлено: ax от Октябрь 01, 2009, 15:11
для double пользую
Код:
#include <math.h>
//...........
double roundDouble(double doValue, int nPrecision)
{
    static const double doBase = 10.0;
    double doComplete5, doComplete5i;

    doComplete5 = doValue * pow(doBase, (double) (nPrecision + 1));

    if (doValue < 0.0)
        doComplete5 -= 5.0;
    else
        doComplete5 += 5.0;

    doComplete5 /= doBase;
    modf(doComplete5, &doComplete5i);

    return doComplete5i / pow(doBase, (double) nPrecision);
}



Название: Re: как ограничить float?
Отправлено: navrocky от Декабрь 06, 2009, 13:45
Код
C++ (Qt)
(float)qRound(value * 100) / 100
А если ее float выходит за диапазон int?

А стандартную функцию round отменили?

Код:
#include <math.h>

double round(double x);

или нужно округлять только с помощью кутэ?


Название: Re: как ограничить float?
Отправлено: zenden от Декабрь 06, 2009, 19:42
а где в стандартной функции задать точность  ???


Название: Re: как ограничить float?
Отправлено: navrocky от Декабрь 06, 2009, 22:15
round(x * 100) / 100


Название: Re: как ограничить float?
Отправлено: SASA от Декабрь 07, 2009, 11:55
Я когда-то писал класс, обёртку над float. Было ограничение, что бы не меньше 0, но не больше 1. Перекрыл оператор присваивания, кострукторы. Работал как с обычным float, и не надо вызывать каждый раз специальные функции для округления.


Название: Re: как ограничить float?
Отправлено: reD_Rus от Декабрь 07, 2009, 12:26
Код:
qreal V=0.01*floor(100*(Vol)+0.5);
советую использовать qreal вместо float, если же конечно не под ARM процы пишешь.
http://www.ibm.com/developerworks/ru/library/l-qt_2/index.html (http://www.ibm.com/developerworks/ru/library/l-qt_2/index.html)


Название: Re: как ограничить float?
Отправлено: Igors от Декабрь 07, 2009, 12:54
Код:
qreal V=0.01*floor(100*(Vol)+0.5);
Не попрет с отрицательными числами :) А вообще navrocky прав: с round покороче будет - не знал что есть такая удобная ф-ция, спасибо.

советую использовать qreal вместо float, если же конечно не под ARM процы пишешь.
http://www.ibm.com/developerworks/ru/library/l-qt_2/index.html
Не жирно ли будет для хранения данных? Люди 16-битный float используют вовсю...