-1

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

有什么想法我在这里想念的吗?

我的 FloatArray 类获取函数:

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;
}

重载 << 运算符:

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
4

3 回答 3

1

这就是问题:

 v
int returnval(0);

为什么是int?

于 2013-05-03T03:19:31.017 回答
0

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

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

于 2013-05-03T03:20:40.963 回答
0

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

于 2013-05-03T03:22:30.603 回答