C# 为什么(1/90)=0?

C# 为什么(1/90)=0?,c#,C#,我在Unity3D中与C一起工作,得到了一个奇怪的结果。有人能告诉我为什么我的代码等于0吗 float A = 1 / 90; 文本1和90被解释为int。所以使用了。之后,结果将转换为浮点值 一般情况下,C#会将所有数字序列(无小数点)读取为int。如有必要,int将转换为浮点。但在作业之前,这是没有必要的。因此,中间的所有计算都按ints进行 换句话说,你写的是: float A = (float) ((int) 1)/((int) 90) (此处明确表示,这或多或少是编译器读取的内容)

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

float A = 1 / 90;

文本
1
90
被解释为
int
。所以使用了。之后,结果将转换为
浮点值

一般情况下,C#会将所有数字序列(无小数点)读取为
int
。如有必要,
int
将转换为
浮点
。但在作业之前,这是没有必要的。因此,中间的所有计算都按
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;
在这种情况下,将执行浮点除法。这两部分都考虑在内


等等。

浮点的精度是多少?我似乎找不到任何关于它的文档,但我想我看错了。它不在unity脚本引用中…我更改了标记,因为这与unity无关,这是简单的c。1和90是int。因此,结果是一个int(零),然后在分配中转换为float。如果在大多数C派生语言中需要floatAs,请使用适当的后缀,将整数除以整数将产生整数结果(截断,而不是四舍五入,因此4/5也是0)。如果至少有一个操作数是浮点常量(或转换为浮点类型),则结果将是浮点值。