为什么(1/2)*x与0.5*x不同?

Rog*_*Lam 10 c c++

这表现得很好:

double t = r[1][0] * .5;
Run Code Online (Sandbox Code Playgroud)

但这不是:

double t = ((1/2)*r[1][0]);
Run Code Online (Sandbox Code Playgroud)

r 是一个二维矢量.

只是想到了一种可能性.是因为(1/2)被认为是int(1/2) == 0

Aus*_*oke 58

是因为(1/2)被认为是int而(1/2)== 0?

是的,这两个文字都是类型int,因此结果将是类型int,结果是0.

相反,使其中一个文字成为float或者double你将得到浮点结果0.5,即:

double t = ((1.0/2)*r[1][0]);

因为1.0是类型double,int2将被提升为a double,结果将是a double.


oua*_*uah 14

写这个:

  double t = ((1/2.0)*r[1][0]);
Run Code Online (Sandbox Code Playgroud)

1 / 2是一个整数除法,结果是0.

1 / 2.0是一个浮点除法(double通常的算术转换后的值),其结果是0.5.


AgA*_*AgA 5

因为1/2int/ int师.这意味着无论什么结果将删除小数点后的任何内容(截断).所以1/2= 0.5 = 0.

通常我总是写下第一个数字double:1.0/2......

如果您输入第一个数字,double那么所有剩余的计算double仅在此处完成.

  • 请注意,在"2.0*x +(7/5)"中,第一个数字是"double",OP的问题仍然存在. (2认同)