c++ - 总不会打印为双

标签 c++ arrays pointers double cout

<分区>

我正在寻找一个数组的中间位置,但如果它是偶数组数组,我必须找到两个中间数字的平均值。我将变量初始化为 double ;但它仍然无法正常工作。我试过 setprecision 并找到了正确的值。

void median (int *pScores, int numScores)
{
    insertionSort(pScores, numScores);

    int mid = 0;
    int midRight = 0;
    int midLeft = 0;
    double midEven;

    //if array is odd
    if (numScores % 2 != 0)
    {
        mid = numScores / 2;
        cout << "Middle Position: " << *(pScores + mid) << endl;
    }

    //if array is even
    if (numScores % 2 == 0)
    {
        midRight = (numScores/2);
        midLeft = (numScores/2) - 1;


        cout << *(pScores + midRight) << endl;
        cout << *(pScores + midLeft) << endl;

        midEven = ( *(pScores + midRight) + *(pScores + midLeft) ) / 2;
        cout << "Median: "<< setprecision(2) << midEven << endl;
    } 
}

我尝试将 double midEven 初始化为 double midEven = 0;和双 midEven = 0.0;而且我仍然没有得到小数点。

最佳答案

在 C++ 中,一个整数除以一个整数仍然是一个整数(实际上任何有两个整数的数学运算都会得到一个整数)。所以你应该先把它们加倍:

midEven = static_cast<double>( *(pScores + midRight) + *(pScores + midLeft) ) / 2;

或将它们除以 2.0,这是一个双数。

midEven = ( *(pScores + midRight) + *(pScores + midLeft) ) / 2.0;

但是,这两种方法都存在一个潜在的问题,即两个分数的总和可能会超过整数的限制。因此,如果您认为这可能发生,更谨慎的方法是:

midEven = ( static_cast<double>(pScores[midRight]) + static_cast<double>(pScores[midLeft]) ) / 2;

关于c++ - 总不会打印为双,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21200296/

相关文章:

c++ - 按位重载 OR ('|' ) 链接操作未按预期工作

c++ - 未处理的 C++ 异常中的 DUMP

c++ - 尝试在结构中接收模板并将其用于 std::vector

arrays - Matlab - 将字符串 ('321' ) 转换为 [3,2,1]

c++ - 如何在一个类中有一个多维可变维度数组?

javascript - 如何通过id过滤并获取数组?

c++ - 使用自指针为类数据成员赋值时的区别

c++ - 无法在类中初始化 unique_ptr 的 vector

c++ - 谷歌测试夹具 : passing a class member size

c++ - '*' token 模板化链表之前的预期构造函数、析构函数或类型转换