四舍五入到100单位

时间:2013-10-10 08:34:23

标签: c++ visual-studio-2010

我不知道以下想法是否可行来概括它,但我想将每个计算值四舍五入为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;
...

4 个答案:

答案 0 :(得分:2)

要向上舍入,您可以使用:

x_final = ((int)x / 100 + 1) * 100;

答案 1 :(得分:1)

显而易见的解决方案是使用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) 平台,以及Windows下的CygWin),它应该存在于 <math.h>,无论如何。 (但它在Visual中不存在 工作室。)

缺乏此功能,如:

int
roundTo100( double x )
{
    int results = round( x / 100 );
    return 100 * results;
}

可能会成功。请注意这两个函数是圆的 略有不同。如果剩下的话,第一个是四舍五入 正好是50,第二是圆到均匀。第二个可能 可能由于划分而引入不准确(或 不是 - 我没有充分分析它以确保一种方式 或者其他)。

取决于x的来源,舍入差异 或潜在的不准确可能不是问题。 (如果,为 例如,x来源于一些物理测量 只有3位十进制数字的精确度,它可以是圆形的事实 当x与某些1E14远离50时“不正确” 喜欢可能无关紧要。)

答案 2 :(得分:0)

ctry this:

#include <math.h>
...

x_final = ceil(x/100)*100;

答案 3 :(得分:0)

除以100(忽略余数),然后乘以100。

#include <iostream>
using namespace std;

int main() {
    int val = 456;
    int r = (val / 100) * 100;
    cout << "r = " << r;
    return 0;
}