舍入应该返回的双变量,而不是打印

时间:2015-04-18 04:22:31

标签: c++ double rounding

我正在编写一个平均函数,它取一个数组的平均值,并将答案返回到2个小数位。但是,我在网上找到的唯一方法是使用printf()cout()

但我不希望每次调用此函数时都将其打印出来,因为它用于其他函数,例如方差方程和不应显示平均函数的标准偏差方程。

如果有人能告诉我这样做的方法,我将永远感激不尽。我认为我的问题很广泛,代码并不是真正需要的,但无论如何它都是以防万一。它只是持续了几个小数点。不确定这是确切的值还是截止点。

double avg(int a[],int n) // compute the average of n data storing in the array a
{
    double addsum = (double)sum(a,n)/(double)n;
    return addsum;
}

4 个答案:

答案 0 :(得分:4)

由于浮点值始终为二进制,因此您可以做的最好的事情是将最接近的二进制数返回到您真正想要的小数。但这个过程相对容易。

double round_two_places(double x)
{
    return floor(x * 100.0 + 0.5) / 100.0;
}

答案 1 :(得分:3)

以下列方式使用头文件ceil中的math.h函数来舍入最多两个小数点:

double avg(int a[], int n) 
{
    double addsum = (double) sum(a, n) / (double) n;
    addsum = ceil(x * 100.0 - 0.5) / 100.0;
    return addsum;
}

答案 2 :(得分:2)

您可以移动值截断它并将其移回。

示例代码

double round(double value, unsigned n)
{
    double shift = std::pow(10, n);
    value *= shift;
    value = (int) value;
    value /= shift;
    return value;
}

int main()
{
    double value = 1.23456;
    std::cout << "before: " << value << ", after: " << round(value, 2) << "\n";
    return 0;
}

警告:此代码可能不适用于所有用例(例如,当舍入大数字和/或舍入到多个小数位时)

示例输出

before: 1.23456, after: 1.23

答案 3 :(得分:2)

std::round为您提供与其参数最接近的整数。要模拟小数点后第3位的舍入,请使用std::round(addsum*100.0)/100.0

double avg(int a[],int n) // compute the average of n data storing in the array a
{
    double addsum = (double)sum(a,n)/(double)n;
    return std::round(addsum*100.0)/100.0;
}