C++浮点到int

Mic*_*ync 17 c++

也许,这是一个非常简单的问题,但我无法得到答案.我已经搜索了很长一段时间(现在谷歌认为我正在发送自动查询http://twitter.com/michaelsync/status/17177278608)..

int n = 4.35 *100;
cout << n;
Run Code Online (Sandbox Code Playgroud)

为什么输出变为"434"而不是"435"?4.35*100 = 435这是一个整数值,这应该可以分配给整数变量"n",对吗?

或者C++编译器在乘法之前是否将4.35转换为整数?我认为不会.为什么编译器会自动将4.35更改为4.34,这仍然是一个浮点数?

谢谢.

Nic*_*tin 38

每个计算机科学家应该知道的浮点运算

遗憾的是,这真的只是一个起点,因为当时语言会在他们进行类型转换等时引入自己的弱点.在这种情况下,你只是创造了一个无法精确表示常数4.35的情况,因此4.35*100更像是434.9999999999,并投以inttrunc,不round.


Don*_*nie 7

如果您运行此语句:

cout << 4.35
Run Code Online (Sandbox Code Playgroud)

美元到甜甜圈你会得到类似于4.3499998821的东西,因为4.35在浮点数中并不完全可以表示.

当编译器将float转换为int时,它会截断.

要获得您期望的行为,请尝试:

int n = floor((4.35 * 100.0) + 0.5);

(棘手的floor是因为C++没有本机round()功能)

  • 实际上,c++11 中有一个用于浮点数的圆形函数。 (2认同)