具有double的变量无法正常工作

时间:2019-04-11 18:33:59

标签: c++

所以伙计们我有功课要做,但事实并非如此,我遇到double variable的问题,因为它的计算没有像floating那样的integer

在计算之前,我曾尝试编写(double),但是没有用

    #include <iostream>
    #include <cstdlib>
    #include <iomanip>

    using namespace std;

    int main () {

        system ("chcp 1257");
        system ("color 8F");

        for(int a = 0 ;a <=18;a++){

            double t = 8 + (18 - a)/2;
            cout << "\n       "<<setw(2)<< a << "                " << setprecision(1) << fixed << setw(4)<< t ;
        };


    return 0;
    }

我得到的结果是这个https://i.imgur.com/bdjxvUp.png

即使我应该得到这个https://i.imgur.com/emhkMsV.png

(这是我的第一篇文章,所以我无法像普通人一样格式化图像)

编辑:问题是(double)不能转换代码行中的所有变量,并且转换所需的变量是需要划分的变量

1 个答案:

答案 0 :(得分:0)

  

免责声明:我不是计算机科学家,所以我无法准确解释计算机中数字的表示方式或“浮点算术”的完成方式。但是,我早年就认识到您的概念性问题。

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

    usr@cmptr $ python2
    >>> 1/2
    0
    

    那显然是不对的...

  • 那在python3中呢?

    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
    

    现在的结论是,我们处理整数和十进制数的除法之间显然存在区别...

  • 为说明起见,请使用旧的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;
    }
    

    现在编译并运行:

    usr@cmptr $ gcc     main.c   -o main
    usr@cmptr $ ./main
    0, 0.500000, 0.500000, 0.500000, 0.500000, 0
    

为了获得所需的结果,似乎我们至少需要 个数字作为十进制数字或“浮点数”。原因是整数除法与十进制数的处理方式不同。

我希望这会有所帮助。