Russian Qt Forum
Ноябрь 01, 2024, 08:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: как ограничить float?  (Прочитано 13964 раз)
Firefox
Гость
« : Сентябрь 29, 2009, 22:19 »

Пишу программу. в ней есть математические вычисления. результат в формате Float, как ограничить его, например двумя числами после запятой. сразу оговорюсь перевод в строчную форму или варианты с выводом на экран мне не подходят.  Смеющийся
Записан
_OLEGator_
Гость
« Ответ #1 : Сентябрь 29, 2009, 22:25 »

qRound(value * 100) / 100
Записан
Barmaglodd
Гость
« Ответ #2 : Сентябрь 30, 2009, 08:51 »

qRound(value * 100) / 100
Ага, и получим целочисленный результат без дробной части.
« Последнее редактирование: Сентябрь 30, 2009, 08:52 от Barmaglodd » Записан
Firefox
Гость
« Ответ #3 : Сентябрь 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();
}
но цифры как были гигантскими так и остались. попробовала тоже в отдельной програмке с переменной всё сработало.в чём проблема?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Сентябрь 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;
}
Записан
Firefox
Гость
« Ответ #5 : Сентябрь 30, 2009, 18:51 »

Спасибо всем за советы))
Записан
_OLEGator_
Гость
« Ответ #6 : Сентябрь 30, 2009, 21:21 »

qRound(value * 100) / 100
Ага, и получим целочисленный результат без дробной части.

Так не получим:
Код
C++ (Qt)
qRound(value * 100) / 100.0
или
Код
C++ (Qt)
(float)qRound(value * 100) / 100
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Сентябрь 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
Записан
ax
Чайник
*
Offline Offline

Сообщений: 60


Просмотр профиля
« Ответ #8 : Октябрь 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);
}

Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #9 : Декабрь 06, 2009, 13:45 »

Код
C++ (Qt)
(float)qRound(value * 100) / 100
А если ее float выходит за диапазон int?

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

Код:
#include <math.h>

double round(double x);

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

Гугль в помощь
zenden
Гость
« Ответ #10 : Декабрь 06, 2009, 19:42 »

а где в стандартной функции задать точность  Непонимающий
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #11 : Декабрь 06, 2009, 22:15 »

round(x * 100) / 100
Записан

Гугль в помощь
SASA
Гость
« Ответ #12 : Декабрь 07, 2009, 11:55 »

Я когда-то писал класс, обёртку над float. Было ограничение, что бы не меньше 0, но не больше 1. Перекрыл оператор присваивания, кострукторы. Работал как с обычным float, и не надо вызывать каждый раз специальные функции для округления.
Записан
reD_Rus
Гость
« Ответ #13 : Декабрь 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
« Последнее редактирование: Декабрь 07, 2009, 12:32 от reD_Rus » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Декабрь 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 используют вовсю...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.238 секунд. Запросов: 23.