实现类型转换

时间:2012-11-02 17:07:10

标签: c++

因此我无法确定应该为我的代码实现类型转换的位置。我理解类型转换的目的,但我只是没有得到(或者过度思考)应该针对我的特定情况。

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

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

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

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

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

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

您不需要进行类型转换。只需打电话给你的功能:

PrintHex(sphere.CalcCircumference());

编译器会将float转换为int,其方式与类型转换完全相同。