Ребят, как в С++ округлить число (double) с заданной точность? Причём точность задана не в количестве знаков после запятой, а как вещественное число.
т.е. точность может быть:
0.1
0.25
0.5
0.01
и др.
С Богом. Александр.
С Богом. Александр.
Здравствуйте, WinterMute, Вы писали:
WM>double value = ...;
WM>double tochnost = 0.25;
WM>double okruglyonnoe_value = ::round( value / tochnost ) * tochnost;
названия переменных жгут
)
_DA>а с точностью b будет выглядеть примерно так: a+b/2 — fmod(a+b/2, b)
Ужастный код!
Аффтар, .. ну дальше вы догадались.
Здравствуйте, 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);
}