我试图除以(float)200 / (float)500
,但结果是 0.0。为什么会这样?我们怎么能得到 0.4 作为结果?非常感谢。
问问题
911 次
4 回答
3
这是一个非常常见的错误,每个程序员都至少犯过一次。有两种除法运算符,它们都使用相同的符号,整数和浮点。编译器根据操作数的类型选择它使用的类型。如果左右操作数都是整数,那么你将得到一个整数除法。机器码中的 idiv 指令。它截断为零并产生积分结果。
只要至少有一个操作数是浮点数,您就会得到机器代码中的 fdiv 指令以及您正在寻找的结果。就像您在问题中所做的那样,只需转换为 (float) 或 (double) 就足够了。你只需要施放其中一个。或使用浮点文字,如 200f 或 200.0
于 2010-03-31T08:22:44.577 回答
2
这不可能。我可以想到以下场景:
- 您将结果转换为整数;在这种情况下,它被四舍五入为 0
- 200 和 500 并不是真正的浮点数,而是整数;结果将默认为整数
- 您打印浮点数的方式要么将其转换为整数,要么不显示十进制值。
于 2010-03-31T08:01:22.993 回答
2
这里没有错 - 我和安德烈亚斯在一起。
Console.WriteLine((float)200 / (float)500);
Console.WriteLine("Press any key to continue");
Console.ReadKey(true);
结果是:
0.4
按任意键继续
于 2010-03-31T08:04:27.333 回答
0
我在使用 Unity3D 项目的 MonoDevelop 调试器中遇到了这个问题。不知何故,评估窗口显示 1.0f/10.0f = 0 long。这只是 MonoDevelop IDE 的一个错误。
于 2013-08-03T12:57:14.790 回答