округление с заданной точностью
От: alex-v  
Дата: 10.11.09 17:21
Оценка:
Ребят, как в С++ округлить число (double) с заданной точность? Причём точность задана не в количестве знаков после запятой, а как вещественное число.

т.е. точность может быть:
0.1
0.25
0.5
0.01

и др.
С Богом. Александр.
Re: округление с заданной точностью
От: _DAle_ Беларусь  
Дата: 10.11.09 17:45
Оценка:
Здравствуйте, alex-v, Вы писали:

AV>Ребят, как в С++ округлить число (double) с заданной точность? Причём точность задана не в количестве знаков после запятой, а как вещественное число.


AV>т.е. точность может быть:

AV>0.1
AV>0.25
AV>0.5
AV>0.01

AV>и др.


а с точностью b будет выглядеть примерно так: a+b/2 — fmod(a+b/2, b)
Re: округление с заданной точностью
От: WinterMute Россия http://yarrr.ru
Дата: 10.11.09 17:46
Оценка: :)))
double value = ...;

double tochnost = 0.25;
double okruglyonnoe_value = ::round( value / tochnost ) * tochnost;

AV>Ребят, как в С++ округлить число (double) с заданной точность? Причём точность задана не в количестве знаков после запятой, а как вещественное число.


AV>т.е. точность может быть:

AV>0.1
AV>0.25
AV>0.5
AV>0.01

AV>и др.
Re: округление с заданной точностью
От: alex-v  
Дата: 10.11.09 17:53
Оценка:
пасиб
С Богом. Александр.
Re[2]: округление с заданной точностью
От: zaufi Земля  
Дата: 10.11.09 20:00
Оценка: +1
Здравствуйте, WinterMute, Вы писали:

WM>double value = ...;


WM>double tochnost = 0.25;

WM>double okruglyonnoe_value = ::round( value / tochnost ) * tochnost;

названия переменных жгут )
Re[3]: округление с заданной точностью
От: WinterMute Россия http://yarrr.ru
Дата: 11.11.09 09:32
Оценка:
Спасибо, я старался.

Z>названия переменных жгут )
Re[2]: округление с заданной точностью
От: johny5 Новая Зеландия
Дата: 17.11.09 03:30
Оценка:
_DA>а с точностью b будет выглядеть примерно так: a+b/2 — fmod(a+b/2, b)

Ужастный код! Аффтар, .. ну дальше вы догадались.
Re: округление с заданной точностью
От: hotdox  
Дата: 17.11.09 13:28
Оценка:
Здравствуйте, alex-v, Вы писали:

AV>Ребят, как в С++ округлить число (double) с заданной точность? Причём точность задана не в количестве знаков после запятой, а как вещественное число.


AV>т.е. точность может быть:

AV>0.1
AV>0.25
AV>0.5
AV>0.01

AV>и др.


Если все правильно понял, то нужно double деление с остатком

Вот мой велосипед :


template<class Divisible>
Divisible int_div(const Divisible div,const Divisible by_mod)
{
  return static_cast<Divisible>(round(div/by_mod));
}

/// Вызывай чтоб получить целую часть
template<class CountType>
CountType int_div_int_part(const CountType from,const CountType by)
{
  return by*int_div(from,by);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.