Why is (1/90) = 0?
我和C#在Unity3D工作,得到了一个奇怪的结果。有人能告诉我为什么我的代码等于0吗?
- float的精度是多少?
- 我似乎找不到任何相关文件,但我想我找错了。它不在Unity脚本引用中…
- 我更改了标签,因为这与Unity无关,这就是普通的c。1和90是int,所以结果是int(零),而不是在分配中转换为float。如果需要浮动,请使用适当的后缀
- 与大多数C派生语言一样,将整数除以整数会得到整数结果(截断,而不是四舍五入——所以4/5也是0)。如果至少有一个操作数是浮点常量(或强制转换为浮点类型),则结果将是浮点值。
文字1和90被解释为int。所以使用整数除法。然后将结果转换为float。
一般情况下,C_将把所有数字序列(不带小数点)作为int来读取。必要时,将int转换为float。但在分配任务之前,这是不必要的。因此,两者之间的所有计算均按ints进行。
换句话说,你写的是:
1
| float A = (float) ((int) 1)/((int) 90) |
(在此明确说明,这或多或少是编译器所读取的内容)。
现在对两个int的除法进行处理,这样只考虑整数部分。0.011111的不可分割部分是0,因此为零。
但是,如果您将其中一个文本修改为浮点(1f、1.0f、90f…)或两者都修改,这将有效。因此,使用其中一个:
1 2 3
| float A = 1/90.0f;
float A = 1.0f/90;
float A = 1.0f/90.0f; |
在这种情况下,将执行浮点除法。这考虑到了两个部分。
等。