我编写了自己的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
答案 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
- 所以你正在失去精确度。