将数字格式化为n个小数位而不进行舍入

时间:2016-01-16 17:13:11

标签: c++

我想创建一个c ++程序来计算3个正数的平均值

其中(x,y,z)> 0且(x,y,z)<= 10

我有这段代码:

#include <iostream>
#include <cstdio>
#include <math.h>

using namespace std;

int main()
{
    int x,y,z;
    cin >> x >> y >> z;
    double x1,y1,z1,ma;
    x1 = x;
    y1 = y;
    z1 = z;

    if(x>0 && x<=10 && y>0 && y<=10 && z>0 && z<=10)
        ma = (x1+y1+z1)/3;
    else
        return 0;

    printf("%.2f" , ma);

    return 0;
}

对于x = 9,y = 9且z = 5,平均值为23/3 = 7.666666666666667,当我格式化为2位小数时,结果将为7.67,但我想显示7.66而不是7.67。

拜托,有人可以帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

不使用其他功能,您可以这样做:

double x = (double)((int)(23 * 100 / 3)) / 100.0;

甚至更简单:

double x = (double)(int)(23 * 100 / 3) / 100.0;

int cast会截断剩余的数字(因此没有舍入)。

在C ++ 11中,还有trunc()函数可以做到这一点。