0

所以我很难弄清楚我应该在哪里为我的代码实现类型转换。我理解类型转换的目的,但我只是不明白(或过度思考)它应该在我的给定情况下到底去哪里。

所以我有一个功能。它将接受输入并以十六进制形式打印出来。

void PrintHex(int InNum)
{
cout << hex << setiosflags (ios_base::showbase) << InNum;
};

问题是,它不会像预期的那样接收 int ,而是从我的类的成员函数中接收到浮点数。

float Sphere::CalcCircumference()
{
return (Pi * (Radius*2));
};

我需要将 float 类型转换为 int 以避免精度损失。但究竟我在哪里做呢?我觉得我可能需要在确定圆周的成员函数中执行此操作,以静态形式返回结果。但我不确定。

4

2 回答 2

3

您的问题令人困惑:您提到您不想失去精度,但是将浮点数转换为 int 会导致精度损失。例如,

float i = 1.3;
int j = (int)i; // j get the value 1

我猜您想将 float 变量的内容打印为 int,这样您就不会失去任何精度。如果是这样的话,方法如下:

float i = 1.3;
int j = *((int*)&i); // j get the int representation value of i

我希望您了解浮点类型的舍入错误。在计算机中,没有这样的东西可以精确地表示,例如 0.2。所以浮点总是有一些小错误。但这超出了此功能的范围。

于 2012-11-02T17:28:19.470 回答
0

您不需要类型转换。只需调用您的函数:

PrintHex(sphere.CalcCircumference());

编译器将以与类型转换完全相同的方式将 float 转换为 int。

于 2012-11-02T17:16:43.650 回答