Функция округления
Спасибо за внимание и понимание!
Вот есть например число 0,121423556 как его округлить(обрезать) до 0,12 ??? Я нашол кую-то функцию но шото она нифига не делает... тобиш если можно то отвечайте с спримером :)
Спасибо за внимание и понимание!
округляй при выводе:
Вот есть например число 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;
}
RoundTo(x, -2);
Предупреждаю: в данном случае RoundTo() может работать некорректно, афаир, если [FONT=courier new]x[/FONT] будет больше 1E15. Короче, несколько глюкавая функция.
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;
Так точно работает!! Шо скажите? Нормально?
}
{
int multipler = pow(10,precision);
return floor(value*multipler+0.5)/multipler;
}
округляй при выводе:
А если нужно заранее, то так
char buf[128];
sprintf(buf,"%.2f",var);
...
Теперь в buf лежит NULL terminated строка содержащая округленное до второго знака число.