C ++截断函数返回中的浮点数

时间:2013-05-03 03:15:35

标签: c++ function floating-point return truncate

我编写了自己的FloatArray类用于项目。我遇到的问题是,当我使用get方法返回给定索引处的值时,返回的值是截断的int而不是整个float。如果我使用重载<<我在其中制作的算子(它以正常方式访问背景数组)它打印整个浮动就好了。

我在这里缺少什么想法?

My FloatArray Class get函数:

float FloatArray::get(int index) const
{
    int returnval(0);

    if (index > this->size-1 || index < 0)
        {
            cout << "Index Out of Bounds!" << endl;
            exit(1);
        }
    else
        {
            returnval=this->array[index];
        }

    return returnval;
}

重载&lt;&lt;操作者:

ostream & operator<<(ostream & _ostream, FloatArray &rhs)
{
    for(int i=0; i <= rhs.size-1; i++)
        {
            _ostream << rhs.array[i] << " ";
        }
    return _ostream;
}

示例主要:

int main()
{

    FloatArray floats(2);

    float zero(0.12);
    float one(1.12);
    float two(2.12);

    floats.push(zero);
    floats.push(one);

    floats.expandBy(1);

    floats.push(two);

    cout << "Using overloaded << operator: " << floats << endl;

    cout.precision(2);
    cout << fixed << "Using get function: " << floats.get(0) << " " << floats.get(1) << " " << floats.get(2) << endl;




    return 0;
}

主要输出:

Using overloaded << operator: 0.12 1.12 2.12 
Using get function: 0.00 1.00 2.00

3 个答案:

答案 0 :(得分:1)

这是问题所在:

 v
int returnval(0);

为什么选择int?

答案 1 :(得分:0)

您正在使用整数变量来保存get函数中的返回值。当您返回时,它会自动转换为浮点数,但您无法重新获得数组值的浮动部分。

使用float作为returnval的类型,或者立即返回this-&gt; array [index]的值,而不首先将其存储在临时变量中。由于第一部分终止了程序,因此不需要在if语句中使用else子句。

答案 2 :(得分:0)

float FloatArray::get(int index) const - 但是你返回return returnval; int - 所以你正在失去精确度。