关于c#:为什么(1/90)= 0?


Why is (1/90) = 0?

本问题已经有最佳答案,请猛点这里访问。

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

1
float A = 1 / 90;


文字190被解释为int。所以使用整数除法。然后将结果转换为float

一般情况下,C_将把所有数字序列(不带小数点)作为int来读取。必要时,将int转换为float。但在分配任务之前,这是不必要的。因此,两者之间的所有计算均按ints进行。

换句话说,你写的是:

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

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

现在对两个int的除法进行处理,这样只考虑整数部分。0.011111的不可分割部分是0,因此为零。

但是,如果您将其中一个文本修改为浮点(1f1.0f90f…)或两者都修改,这将有效。因此,使用其中一个:

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

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

等。