所以伙计们我有功课要做,但事实并非如此,我遇到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)不能转换代码行中的所有变量,并且转换所需的变量是需要划分的变量
答案 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
为了获得所需的结果,似乎我们至少需要 个数字作为十进制数字或“浮点数”。原因是整数除法与十进制数的处理方式不同。
我希望这会有所帮助。