圆形浮点数的源代码

时间:2014-04-03 11:28:09

标签: c++ c visual-c++

除了使用像ceilfloor之类的内置函数之外,你如何围绕一个浮点数?

我想将2.10转换为2.14-> 2.1和2.15至2.19 - > 2.2

我写了一些逻辑,但卡在中间

    float a = 2.24;
    int b = a*100;
    int result n, i =0;
    while(i>2)
    {
        n = b%10;
        i++;
    }
    if(n >5)
    {
      c = b%10;
      c = c/10 + 1;
    }

我尝试了很多inbuild函数,但是所有那些不适用于我的diab编译器

//  totalDist = roundf(totalDist * 10) / 10.0;      
//  totalDist = floor(totalDist * pow(10., 1) + .5) / pow(10., 1);  
    totalDist = floorf(totalDist * 10 + 0.5) / 10;

计划编写自己的逻辑

5 个答案:

答案 0 :(得分:3)

float a = 2.24;
float b = roundf(a*10.0f)/10.0f;//roundf in C99

答案 1 :(得分:1)

尝试int((x + 0.05) * 10.0) / 10.0

您也可以使用trunc代替与int进行转换。

或者您可以使用roundround(x * 10.0) / 10.0

答案 2 :(得分:0)

如果您只想将数字四舍五入以进行输出,那么%.1f格式字符串确实是正确的答案。

printf("%.1f", 2.14);

或 如果你真的想要四舍五入,那就像这样的工作

#include <math.h>

float val = 37.777779;

float rounded_down = floorf(val * 100) / 100;   /* Result: 37.77 */
float nearest = floorf(val * 100 + 0.5) / 100;  /* Result: 37.78 */
float rounded_up = ceilf(val * 100) / 100;      /* Result: 37.78 */

通常我们使用nearest方法

答案 3 :(得分:0)

BLUEPIXY的答案很好。但总的来说;浮点乘法比除法快,所以如果速度相关;乘以0.1而不是除以10.

答案 4 :(得分:0)

因为我的旧答案需要大量精心编程以使其正常工作

我提出了另一种实现循环函数的方法:

您可以轻松检查(正/负)数字是否会被舍入 或者减去(加/减)0.5。然后你可以截断结果 并接受你的回答。另外,为了支持更深层次的圆形 你想让你可以让用户指定一轮的小数位数 想要,瞧:

long double round_f(long double number, int decimal_places)
{
     assert(decimal_places > 0);

     double power = pow(10, decimal_places-1);
     number *= power;

     return (number >= 0) ? ((long long)(number + 0.5))/power : ((long long)(number - 0.5))/power;
}

And here you can see a working example.

旧的:

您可以使用sprint:

#include <stdio.h>

int main(void)
{
    float a = 2.24;
    int size;
    char num[8] = {0};
    sprintf(num, "%d", (int) (a * 100));

    for (size=0; num[size]; size++);

    size--;

    if (num[size] < '5') {
        num[size] = '0';
    } else {
        num[size] = '0';
        if (num[size-1] == '9')
            num[size-1] = '0';
        else
            num[size-1]++;
    }

    printf("a = %f\n", a);
    printf("num = %s\n", num);

    return(0);
}

你可以看到逻辑。最后,您可以将字符串恢复为整数并乘以100。

编辑:这只是逻辑。请参阅下面的评论,了解完全工作所需的内容。