为什么(1/90)= 0?

迈克·奥廷克(Mike Ottink)

我在Unity3D中工作时,C#得到了一个奇怪的结果。谁能告诉我为什么我的代码等于0?

float A = 1 / 90;
威廉·范·昂塞姆(Willem Van Onsem)

文字190被解释为int因此使用整数除法之后,结果将转换为float

通常,C#将所有数字序列(不带小数点)读取为int一个int将被转换为一个float ,如果必要但是在分配作业之前,这不是必需的。因此,介于两者之间的所有计算均以ints完成

换句话说,您写的是:

float A = (float) ((int) 1)/((int) 90)

(在这里明确指出,这或多或少是编译器读取的内容)。

现在,将两个int的除法处理为仅考虑整数部分。的组成部分0.0111110由此为零。

不过,若你修改的文字之一,浮点(1f1.0f90f,...),或两者兼而有之,这将工作。因此,请使用以下之一:

float A = 1/90.0f;
float A = 1.0f/90;
float A = 1.0f/90.0f;

在这种情况下,将执行浮点除法。其中考虑了两个部分。

等等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章