为什么(1/90)= 0?

Mik*_*ink -1 c#

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

float A = 1 / 90;
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 5

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

通常,C#将读取所有数字序列(不带小数点)作为int.一个int将被转换为一个float ,如果必要.但在转让之前,这不是必要的.所以两者之间的所有计算都是以ints 完成的.

换句话说,你写的是:

float A = (float) ((int) 1)/((int) 90)
Run Code Online (Sandbox Code Playgroud)

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

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

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

float A = 1/90.0f;
float A = 1.0f/90;
float A = 1.0f/90.0f;
Run Code Online (Sandbox Code Playgroud)

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

等等