我在Unity3D中工作时,C#
得到了一个奇怪的结果。谁能告诉我为什么我的代码等于0?
float A = 1 / 90;
文字1
和90
被解释为int
。因此使用整数除法。之后,结果将转换为float
。
通常,C#将所有数字序列(不带小数点)读取为int
。一个int
将被转换为一个float
,如果必要。但是在分配作业之前,这不是必需的。因此,介于两者之间的所有计算均以int
s完成。
换句话说,您写的是:
float A = (float) ((int) 1)/((int) 90)
(在这里明确指出,这或多或少是编译器读取的内容)。
现在,将两个int的除法处理为仅考虑整数部分。的组成部分0.011111
是0
由此为零。
不过,若你修改的文字之一,浮点(1f
,1.0f
,90f
,...),或两者兼而有之,这将工作。因此,请使用以下之一:
float A = 1/90.0f;
float A = 1.0f/90;
float A = 1.0f/90.0f;
在这种情况下,将执行浮点除法。其中考虑了两个部分。
等等。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句