这表现得很好:
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.
因为1/2是int/ int师.这意味着无论什么结果将删除小数点后的任何内容(截断).所以1/2= 0.5 = 0.
通常我总是写下第一个数字double:1.0/2......
如果您输入第一个数字,double那么所有剩余的计算double仅在此处完成.