C++代码中的一个问题?

Amelie
  • 81
#include <iostream>
using namespace std;

int main()
{
    double a = 29.2;
    cout << (short)((a - (int)a)*10) << endl;
    a = 2.2;
    cout << (short)((a - (int)a)*10) << endl;

    return 0;
}

输出结果如下:

1
2

编译器&系统:

g++ (GCC) 9.1.0
CentOS Linux release 7.7.1908 (Core)

请问结果为什么不是2 2而是1 2呢?

回复
阅读 586
2 个回答

double有精度损失 double a = 29.2; //29.19999..

 double a = 29.2;
 cout << (short)((a - (int)a + 0.05)*10) << endl;
 a = 2.2;
 cout << (short)((a - (int)a + 0.05)*10 ) << endl;

正如ls说的,是浮点数表示不精确的问题,C++中可以用setprecision设置输出的精度:

#include <vector>
#include <iostream>
#include <iomanip>

using namespace std;

int main() {
  double a = 29.2;
  cout << setprecision(53) << a << endl;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏