Я не знаю, возможна ли следующая идея или нет, чтобы обобщить ее, но я хочу округлить каждое расчетное значение до округления 100 единиц.
пример:
double x;
int x_final;
...
if (x<400) x_final=400;
else if (x<500) x_final=500;
else if (x<600) x_final=600;
...
Очевидным решением является использование remquo
:
int
roundTo100( double x )
{
int results;
remquo( x, 100.0, &results );
return 100 * results;
}
Для этого вам, вероятно, понадобится довольно недавний компилятор: функция была добавлена в C99 и C++ с C++ 11. В зависимости от платформы у вас может не быть вообще этого, или вы можете иметь ее только в <math.h>
(но не в <cmath>
). Если компилятор утверждает поддержку C++ 11, вы должны иметь ее в <cmath>
. Но не верьте, пока вы его не увидели; никакой компилятор фактически не поддерживает C++ 11 до какой-либо реальной степени. На платформах, где есть поддержка C99 (которая будет включать почти все платформы Unix и CygWin под Windows), она должна присутствовать в <math.h>
, независимо. (Но его нет в Visual Studios.)
В отсутствии этой функции что-то вроде:
int
roundTo100( double x )
{
int results = round( x / 100 );
return 100 * results;
}
может сделать трюк. Остерегайтесь того, что две функции круглые несколько иначе. Первый округляет, если остаток равен ровно 50, второй округлый до четного. Второй может потенциально ввести неточности из-за деления (или нет - я недостаточно анализировал его, чтобы быть уверенным так или иначе).
В зависимости от того, откуда исходит ваш x
, различия округления или потенциальные неточности могут не быть проблемой. (Если, например, x
получается из некоторых физических измерений с точностью до 3 десятичных цифр, то факт, что он может быть "неправильным", когда x
удален от 50 к некоторому 1E14 или тому подобное, вероятно, не имеет значения.)
Чтобы округлить, вы можете использовать это:
x_final = ((int)x / 100 + 1) * 100;
round
.
ctry this:
#include <math.h>
...
x_final = ceil(x/100)*100;
Разделите его на 100 (игнорируя остаток), а затем умножьте его на 100.
#include <iostream>
using namespace std;
int main() {
int val = 456;
int r = (val / 100) * 100;
cout << "r = " << r;
return 0;
}