我是计算机工程专业的学生,为 BYU-Idaho 的 C++ 入门课程做辅导,一名学生成功地难倒了我。
如果为此编写代码:
#include <iostream>
using namespace std;
int main()
{
float y = .59;
int x = (int)(y * 100.0);
cout << x << endl;
return 0;
}
结果 = 58
#include <iostream>
using namespace std;
int main()
{
double y = .59;
int x = (int)(y * 100.0);
cout << x << endl;
return 0;
}
结果 = 59
我告诉他这是一个精度问题,因为 int 比 float 更精确,它会丢失信息。double 比 float 更精确,因此可以工作。
但是我不确定我说的是否正确。我认为这与 int 用零填充有关,因此它在被强制转换时被“截断”,但我不确定。
如果你们中的任何一个人想解释这一切“下面”发生的事情,我会觉得这很有趣!