【问题标题】:An unexpected result about divide in C [duplicate]关于 C 中除法的意外结果 [重复]
【发布时间】:2015-12-25 07:45:47
【问题描述】:

我的目标是输出输入数字的平均值及其反转。

当我输入 974 时,结果是 726.0 而不是 726.5。这个问题我想了很久,还是没有得到答案。

希望有人可以帮助我。 非常感谢!

#include <stdio.h>
int main(void)
{
    int N, D1, D2, D3;
    double aver;

    scanf("%d", &N);
    D1 = N % 10;
    D2 = ((N - D1) / 10) % 10;
    D3 = (N - D1 - D2) / 100;
    aver = (D1*100 + D2*10 + D3 + N) / 2;

    printf("%lf", aver);

    return 0;
}

【问题讨论】:

标签: c division


【解决方案1】:

在你的代码中,N、D1、D2、D3,都是ints,所以计算

(D1*100 + D2*10 + D3 + N) / 2;

以整数运算的形式执行,后来结果被提升为double。因此,结果只是 double 值的 int 表示形式。

要强制执行浮点运算,要么

  1. 将操作数数据类型更改为double 或float。
  2. 将至少一个操作数转换为float。

【讨论】:

    【解决方案2】:

    只需添加double。见下文:

    #include <stdio.h>
    int main(void)
    {
        int N, D1, D2, D3;
        double aver;
    
    scanf("%d", &N);
    D1 = N % 10;
    D2 = ((N - D1) / 10) % 10;
    D3 = (N - D1 - D2) / 100;
    aver = (double)(D1*100 + D2*10 + D3 + N) / 2;
    
    printf("%lf", aver);
    
    return 0;
    }
    

    查看Running code

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      相关资源
      最近更新 更多