C# 为什么(1/90)=0?
我在Unity3D中与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) (此处明确表示,这或多或少是编译器读取的内容)
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)。如果至少有一个操作数是浮点常量(或转换为浮点类型),则结果将是浮点值。