我在Unity3D中使用C#
工作,我得到了一个奇怪的结果。谁能告诉我为什么我的代码等于0?
float A = 1 / 90;
答案 0 :(得分:5)
文字1
和90
被解释为int
。所以使用了integer division。之后,结果将转换为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;
在这种情况下,将执行浮点除法。其中考虑了两个部分。
等