考虑以下代码:
#include <iostream>
using namespace std;
int aaa(int a) {
cout << a * 0.3 << endl;
return a * 0.3;
}
int main()
{
cout << aaa(35000);
}
Run Code Online (Sandbox Code Playgroud)
打印出来:
10500
10499
Run Code Online (Sandbox Code Playgroud)
为什么输出不同?
我有一个解决方法,使用"返回*3/10;" 但我不喜欢它.
编辑:
发现做"返回浮动(a*0.3);" 给出期望值;
0.3*35000的结果是浮点数,略小于10500.打印时,它被舍入到10500,但是当被强制转换为int时,小数位被丢弃,结果为10499.
int * double表达式产生双倍,这是打印的第一件事.然后你转换为int砍掉剩下的部分(即使它几乎就在那里,坐在10500-DBL_EPSILON),并将其传回去.第二个打印出那个值.
应该小心地进行float-int转换,最好不要这样做.
| 归档时间: |
|
| 查看次数: |
708 次 |
| 最近记录: |