四舍五入正数上升两位

时间:2011-02-11 15:56:39

标签: c rounding

嘿伙计们,我正在尝试编写一个程序,它将取一个小数部分的正数并将其四舍五入。例如32.4851将舍入到32.49,而32.4431将舍入到32.44。

我真的在这一点上有点失落,并希望你们能帮助我一点点。我使用stdio.h和math.h

编写了一些代码并需要反馈(不会使用gcc编译)
#include <stdio.h>
#include <math.h>

double x;

int rounded_x;

int main (void)
{
        printf ("Enter a number to be rounded \n\n\n\n\n");
        scanf ("&lf", &x);
        rounded_x=(int) (x+0.5);
        return 0;
}

double scale (double x, int n)
{
        double scale_factor;
        scale_factor = pow(10, n);
        return (x*scale_factor);  
}

6 个答案:

答案 0 :(得分:4)

乘以100,除以100解是正确的。但是由于浮点数据类型的性质,这最终会导致欺骗性结果。基数为10的漂亮的圆形数字,如&#34; 1.23&#34;并不总是转换为base-2浮点存储格式。所以你可能会发现四舍五入&#34; 1.2345&#34;结束为&#34; 1.23&#34;正如所料,但&#34; 1.1234&#34;将最终为&#34; 1.11989589285982959295892859289582958295&#34;或者是疯狂的东西。

出于这个原因,如果这种准确性很重要 - 特别是如果你在任何计算中使用这些舍入数字,那么你应该考虑以整数运算。

例如,在使用资金时,开发人员通常以美分而不是美元工作。所以,&#34; 1.75美元&#34;表示为&#34; 175&#34;。这保证了分数的准确性。当您想要将其显示给用户时,只能除以100。

答案 1 :(得分:3)

非常简单。你只需乘以100,加0.5,调用round(),然后除以100。

答案 2 :(得分:0)

我认为您需要double ceil(double x)来获取最小值或double floor(double x)以获得最大值,这两者都包含在math.h中

答案 3 :(得分:0)

这取决于语言的特定实现的特征;对于综合,如果数字3为5或更多,则尝试将0.01加到该值,然后截断结果,如果可能的话,该变量只定义了2个小数位。

答案 4 :(得分:0)

顺便说一下

 scanf ("&lf", &x);

应该是

 scanf ("%lf", &x);
我认为..

答案 5 :(得分:-2)

最简单(但很难看)的代码是:

 int main (void)

    {

    printf ("Enter a number to be rounded \n\n\n\n\n");

    scanf ("&lf", &x);

    rounded_x=((int)(x*100)/100.0);

    return 0;

    }