【问题标题】:Condition to check double is an integer not working检查双精度的条件是整数不起作用
【发布时间】:2019-07-12 01:01:14
【问题描述】:

i 是整数或小数点后没有非零位时,该程序应该在小数点后输出零位。它适用于所有情况,但不适用于最后一种情况。谁能帮我解决这个问题?

代码:

#include <stdio.h>
#include<math.h>
int main()
{
    double i,j,k;
    for(i=0;i<=2;i=i+0.2)
    {
        k=3;
        j=i+1;
        while(k--)
        {
            if(fmod(i,1)==0) printf("I=%.0lf J=%.0lf\n",i,j);
            else printf("I=%.1lf J=%.1lf\n",i,j);
            j++;
        }
    }
}

这是ideone sample execution

【问题讨论】:

  • 请提供例外输出。我认为 i ideone.com/8rPVHu
  • 请附上代码而不是链接。
  • 我认为你需要remainder 而不是fmod
  • 你知道我永远不会等于2吗?迭代从 0 到 1000 的整数,然后除以 5.0
  • @phuclv 我永远不会等于 2? “迭代从 0 到 1000 的整数,然后除以 5.0”对不起,我不明白这一点。你能分解一下吗?

标签: c algorithm floating-point double


【解决方案1】:

根据您的精度级别,您可以使用如下所示的 %g 或 %lg 仅打印最短的可表示项目。在此,我使用 0.5 尺寸。

#include <stdio.h>
#include<math.h>
int main()
{
    double i,j,k;
    for(i=0;i<=2;i=i+0.2)
    {
        k=3;
        j=i+1;
        while(k--)
        {
            if(fmod(i,1)==0)
            {
                printf("I=%.5lg J=%.5lg\n",i,j);
            }
            else
            {
                printf("I=%.5lg J=%.5lg\n",i,j);
            }
            j++;
        }
    }
}

【讨论】:

  • 非常感谢。是的,这是一种方法。但不明白为什么我的代码不起作用。
  • 不起作用。它仍然不会打印确切的 2,仅仅是因为 0.2+0.2+0.2+0.2+0.2 不会产生 1 ideone.com/PNCcd7
猜你喜欢
  • 2011-11-09
  • 2023-03-22
  • 2015-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
相关资源
最近更新 更多