Double和division的问题

时间:2010-09-03 11:51:24

标签: c# .net math double division

  

可能重复:
  Ints and Doubles doing division
  1/252 = 0 in c#?

您好,

也许是因为星期五,但我无法理解:

(Double)1/2 = 0.5
(Double)1/(Double)2 = 0.5
(Double)((Double)1/(Double)2) = 0.5
(Double)(1/2) = 0.0

为什么最后一次操作是0? :S

亲切的问候。

6 个答案:

答案 0 :(得分:9)

因为1和2是整数。结果是0.如果你把它转换为双,那么它仍然是0.这个问题就在几天前被问过。

答案 1 :(得分:2)

如果你划分两个整数,那么结果也将是int。所以1/2给你一个零,这是一个整数。然后你将0加倍,这仍然是零。

答案 2 :(得分:2)

到目前为止,每个人都给了你正确的答案,我正在添加这个,所以其他读者不要在评论中遗漏它。

使用与常规数学相同的规则。首先是 内括号。 所以在第一个例子中,1在分割发生之前被转换为double,使得结果为double( int和double的分割结果是双)。如果是(Double)1/21/(Double)2,则为真。所以在最后一个例子(Double)(1/2)中,首先执行(1/2),在int上执行int,得到int。然后(双)将其转换为双倍。希望这不仅可以帮助你,也可以让其他任何人对这个问题充满好奇。我自己已经多次使用了很长的方程式,并且必须将方程式的每个参数都转换为双精度。

答案 3 :(得分:1)

尝试(双倍)(1.0 / 2.0) - 这将给出你期望的答案。

答案 4 :(得分:1)

如前所述,问题在于类型。您可以使用suffixes确保类型正确无误:

1d/2d=0.5

答案 5 :(得分:1)

  1. (Double)1/2 = 0.5
  2. (Double)1/(Double)2 = 0.5
  3. (Double)((Double)1/(Double)2) = 0.5
  4. (Double)(1/2) = 0.0
  5. 在前三种情况下,您将整数值(当您不使用后缀或不包含点时,thas是数字的默认类型)转换为Double,然后在第一种情况下使用整数值进行除法,并使用double作为2 3,与最后(4)情况相反,括号更改操作顺序首先划分两个整数,然后将结果转换为Double。