我理解int,float和double数据类型之间的区别。但我观察到,有时当我在仅包含整数值的数学运算中使用'int'数据类型时,它给出的结果比正确答案少一个。但是,当我使用float或double时,它是正确的。
看看下面的代码。
#include <iostream>
#include<math.h>
using namespace std;
int getno(int num)
{
int x,i;
float y=0;
for(i=0; i<4; i++)
{
x=num%10;
y=y+(x*pow(10,i));
num=num/10;
cout<<x*pow(10,i)<<endl;
cout<<y<<endl;
}
return y;
}
main()
{
int n;
cin>>n;
cout<<getno(n);
}
如果我将y的数据类型更改为int,则它会给出一个错误的答案。即12345将导致2344而不是所需的2345.为什么会发生这种情况?
答案 0 :(得分:1)
我认为“pow(10,i)”返回的值比10 ^ i少一点,假设i = 3时为999.9999999。
之后它被float-&gt; int转换为99.结果,我们可以在每次“y = ..”操作时丢失1。
答案 1 :(得分:0)
我没有看到你的问题:
#include <iostream>
#include <math.h>
using namespace std;
int getno(int num)
{
int x,i;
float y=0;
for(i=0; i<4; i++)
{
x=num%10;
y=y+(x*pow(10.0f,(float)i));
num=num/10;
cout<<x*pow(10.0f,i)<<endl;
cout<<y<<endl;
}
return (int)y;
}
int main(void)
{
int n=12345;
// cin>>n;
cout<<getno(n);
return 0;
}
,输出为:
5
5
40
45
300
345
2000
2345
2345
我刚刚清理了关于int的浮动转换的警告,以及对你的返回类型的显式转换。