C++ 带有double的变量工作不正常

C++ 带有double的变量工作不正常,c++,C++,所以伙计们,我有一个家庭作业要做,但事实并非如此,我对双变量有一个问题,因为它的计算没有浮点点,就像整数 我在计算之前试过写(double),但没用 #包括 #包括 #包括 使用名称空间std; int main(){ 系统(“chcp 1257”); 系统(“颜色8F”); 对于(int a=0;a 免责声明:我不是计算机科学家,因此我无法准确解释数字在计算机中的表示方式或“浮点运算”是如何完成的。然而,我从早期就认识到你的概念问题 首先考虑python 2的一个示例: usr@cmptr

所以伙计们,我有一个家庭作业要做,但事实并非如此,我对
变量
有一个问题,因为它的计算没有
浮点
点,就像
整数

我在计算之前试过写(
double
),但没用

#包括
#包括
#包括
使用名称空间std;
int main(){
系统(“chcp 1257”);
系统(“颜色8F”);
对于(int a=0;a
免责声明:我不是计算机科学家,因此我无法准确解释数字在计算机中的表示方式或“浮点运算”是如何完成的。然而,我从早期就认识到你的概念问题

  • 首先考虑python 2的一个示例:

    usr@cmptr $ python2
    >>> 1/2
    0
    
    这显然是不对的

  • 那蟒蛇3呢

    usr@cmptr python3
    >>> 1/2
    0.5
    
  • 嗯,R怎么样

    usr@cmptr $ R
    > 1/2
    [1] 0.5
    
  • 好的……还有倍频程/matlab

    usr@cmptr $ octave --no-gui
    octave:1> 1/2
    ans =  0.50000
    
    这是怎么回事

  • 如果有疑问,请返回源代码,即FORTRAN:

    ! File name: "main.f90"
    program min
    x =   1/2
    y = 1.0/2
    print *, x, y
    end program main
    
    编译并运行:

    usr@cmptr $ gfortran main.f90 -o main
    usr@cmptr $ ./main
    0.00000000      0.500000000
    
    usr@cmptr $ gcc     main.c   -o main
    usr@cmptr $ ./main
    0, 0.500000, 0.500000, 0.500000, 0.500000, 0
    
    现在的结论是,我们处理整数除法和十进制数除法的方式明显不同

  • 为了说明如何使用好的旧C

    // file name: main.c
    #include <stdio.h>
    int main()
    {
      int i_a, i_b;          // <-- Integer versions of "a" and "b"
      i_a = 1; i_b = 2;
      double d_a, d_b;       // <-- Decimal versions of "a" and "b"
      d_a = 1; d_b = 2;
      printf(                 //     Print to screen
        "%d, %f, %f, %f, %f, %d\n",
        i_a/i_b,             // <-- regular integer division
        d_a/d_b,             // <-- regular floating point division
        (double)i_a/i_b,      // <-- cast "i_a" to a decimal number
        i_a/(double)i_b,      // <-- cast "i_b" to a decimal number
        1.0/2,               // <-- define 1.0 as a decimal number
        1/2                  // <-- regular integer division
      );
      return 0;
    }
    
似乎我们至少需要一个数字作为十进制数,或“浮点数”,才能达到预期的结果。原因是整数的除法处理方式与十进制数不同


我希望这能有所帮助。

8+(18-a)/2
只涉及
int
s,因此只使用整数运算,包括除法。您不需要图像来共享预期和实际输出。任何使用屏幕阅读器的人现在都无法读取这些图像。任何阻止imgur链接的人也将无法看到它们。如果imgur被DDoS攻击,任何人都将无法看到它们在这段时间内使用它们。将它们粘贴为文本片段是很有礼貌的。
8+(18.0-a)/2;
就可以了。原因(以及这个成语)对于专业程序员来说非常清楚,但是(请原谅我的光顾),你可能想添加一条支持性评论。哇,感谢我的帖子只过了几秒钟,我的问题已经解决了solved@Bathsheba我的FGITW一片空白。我的坏。手机很难移动。