因此我无法确定应该为我的代码实现类型转换的位置。我理解类型转换的目的,但我只是没有得到(或者过度思考)应该针对我的特定情况。
所以我有一个功能。它将采用输入并以十六进制形式打印出来。
void PrintHex(int InNum)
{
cout << hex << setiosflags (ios_base::showbase) << InNum;
};
问题是,它不会按预期接收到int,而是从我的类的成员函数中获取浮点数。
float Sphere::CalcCircumference()
{
return (Pi * (Radius*2));
};
我需要将float类型转换为int以避免精度损失。但究竟我在哪里这样做?我觉得我可能需要在确定Circumference的成员函数中执行它,以静态形式返回结果。但我不确定。
答案 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,其方式与类型转换完全相同。