Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Функция округления

3.6K
19 октября 2004 года
justinX
49 / / 28.07.2004
Вот есть например число 0,121423556 как его округлить(обрезать) до 0,12 ??? Я нашол кую-то функцию но шото она нифига не делает... тобиш если можно то отвечайте с спримером :)
Спасибо за внимание и понимание!
4
19 октября 2004 года
mike
3.7K / / 01.10.2002
Цитата:
Originally posted by justinX
Вот есть например число 0,121423556 как его округлить(обрезать) до 0,12 ??? Я нашол кую-то функцию но шото она нифига не делает... тобиш если можно то отвечайте с спримером :)
Спасибо за внимание и понимание!



округляй при выводе:

 
Код:
printf("%.2f",var);
4.1K
19 октября 2004 года
Olegg
48 / / 17.09.2004
Здесь
2.0K
19 октября 2004 года
Fazil6
126 / / 17.12.2003
RoundTo(x, -2);
2.0K
19 октября 2004 года
Tristan
27 / / 17.10.2002
Цитата:
Originally posted by justinX
Вот есть например число 0,121423556 как его округлить(обрезать) до 0,12 ??? Я нашол кую-то функцию но шото она нифига не делает... тобиш если можно то отвечайте с спримером :)
Спасибо за внимание и понимание!



double __fastcall Round(double Argument, int Precision)
{
double div = 1.0;
if(Precision >= 0)
while(Precision--)
div *= 10.0;
else
while(Precision++)
div /= 10.0;
return floor(Argument * div + 0.5) / div;
}

294
20 октября 2004 года
Plisteron
982 / / 29.08.2003
Цитата:
Originally posted by Fazil6
RoundTo(x, -2);


Предупреждаю: в данном случае RoundTo() может работать некорректно, афаир, если [FONT=courier new]x[/FONT] будет больше 1E15. Короче, несколько глюкавая функция.

3.6K
28 октября 2004 года
justinX
49 / / 28.07.2004
Цитата:
Originally posted by Tristan


double __fastcall Round(double Argument, int Precision)
{
double div = 1.0;
if(Precision >= 0)
while(Precision--)
div *= 10.0;
else
while(Precision++)
div /= 10.0;
return floor(Argument * div + 0.5) / div;
}



Тестирование показало, что строка return floor(Argument * div + 0.5) / div; , а точнее функция floor выдаёт "0"!!!

Но я вот как сделал:

double __fastcall RoundZ(double Argument, int Precision)
{
if(Precision<=0)return Argument;
double R1 = 1.0;//Первичное Целое значение
double R2 = 1.0;
double R3 = 1.0;
R2=modf(Argument,&R1);//возрасчает в R1 целую часть, а в R2 - дробную :)
for(int i=Precision;i>0;i--)
R2=R2*10.0;
R3=modf(R2,&Argument);
for(int i=Precision;i>0;i--)
Argument=Argument/10.0;
Argument=Argument+R1;
return Argument;

Так точно работает!! Шо скажите? Нормально?
}

310
28 октября 2004 года
fellow
853 / / 17.03.2003
 
Код:
double RoundTo(double value,int precision)
{
 int multipler = pow(10,precision);
 return floor(value*multipler+0.5)/multipler;
}
301
13 ноября 2004 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by mike


округляй при выводе:

 
Код:
printf("%.2f",var);



А если нужно заранее, то так

 
Код:
...
char buf[128];
sprintf(buf,"%.2f",var);
...

Теперь в buf лежит NULL terminated строка содержащая округленное до второго знака число.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог