2010-03-31 68 views
1

我试图划分(float)200/(float)500,但结果为0.0。为什么这样,我们怎么能有0.4的结果呢?非常感谢。为什么浮动除以较大的浮点数为零,以及如何避免这种情况在C#中?

+0

那么,在我的机器上'200f/500f == 0.4f'。你如何显示计算结果?你不会将它保存到'int'类型的变量中吗? – 2010-03-31 08:03:26

+0

可能是您的代码以某种方式执行打字或转换错误。你可以发布你的代码给我们检查明显的错误吗? – 2010-03-31 08:05:32

+0

我知道这是不可能的,但它只是做到了。我试图再次运行该程序,它工作正常。我很抱歉浪费你的时间。非常感谢。 – Jronny 2010-03-31 08:13:30

回答

2

这是不可能的。我可以考虑以下情况:

  1. 您正在将结果强制转换为整数;在这种情况下,它被取整为0
  2. 200和500不是真的漂浮物,而是整数;结果将默认为整数
  3. 您打印浮点数的方式将其转换为整数或不显示小数值。
2

这里没什么错 - 我和安德烈亚斯在一起。

Console.WriteLine((float)200/(float)500); 

    Console.WriteLine("Press any key to continue"); 
    Console.ReadKey(true); 

结果:

0.4

按任意键继续

3

这是一个非常常见的错误,每个程序员都使得它至少一次。有两个类的除法运算符,它们都使用相同的符号,积分和浮点数。编译器根据操作数的类型选择使用哪个。如果均为,则左侧和右侧的操作数是不可分割的,那么您将得到一个整数除法。机器代码中的idiv指令。它截断为零并产生一个整数结果。

只要至少一个操作数是浮点数,您将在机器代码中获得fdiv指令并查找结果。简单地转换成(浮动)或(双)就足够了,就像你在你的问题中所做的一样。你只需要施放其中一个。或者使用像200f或200.0这样的浮点文字

0

我在使用Unity3D项目的MonoDevelop调试器中遇到过这个问题。以某种方式评估窗口显示1.0f/10.0f = 0长。这只是MonoDevelop IDE的一个bug。

相关问题