0

我了解 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。为什么会发生这种情况?

4

2 回答 2

1

我想“pow(10, i)”返回的值比 10^i 小一点,比如 i=3 的 999.9999999。

然后它被 float->int 转换为 99 截断。结果,我们可以在每个“y=..”操作中损失 1。

于 2013-06-06T22:04:43.390 回答
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 的警告,以便在您调用 pow 时进行浮点转换并显式转换您的返回类型。

于 2013-06-06T22:00:24.590 回答