【问题标题】:Problem with Double and division [duplicate]Double和除法的问题[重复]
【发布时间】:2010-09-03 11:51:24
【问题描述】:

可能的重复:
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

亲切的问候。

【问题讨论】:

  • 可能是因为这样,你不应该问这样的问题。
  • 这是我的问题,为什么会这样
  • @Ravi - 这是一个有效的问题,尽管我敢肯定之前有人问过这个问题。我看不出投反对票的原因
  • @Ravi,这个问题有什么不好?
  • @LittleBobby:如果你理解(需要)(double)1/2,最后一个也很明显。

标签: c# .net math double division


【解决方案1】:

因为 1 和 2 是整数。结果为 0。如果将其转换为双精度数,则仍为 0。这个问题是几天前才提出的。

【讨论】:

【解决方案2】:

如果你将两个整数相除,那么结果也将是整数。所以 1/2 给你一个零,它是一个整数。然后你将 0 转换为 double,它仍然是零。

【讨论】:

    【解决方案3】:

    到目前为止,每个人都给了你正确的答案,我添加这个是为了让其他读者不要在 cmets 中错过它。

    使用与常规数学相同的规则。 内括号优先。 所以在第一个例子中,1 在除法发生之前被强制转换为双精度数,使结果成为双精度数(int 和双精度的除法导致双倍)。如果它是(Double)1/21/(Double)2,这听起来很真实。所以在最后一个例子(Double)(1/2)中,首先执行(1/2),int on int,得到int。然后 (Double) 将其转换为 Double。希望这不仅可以帮助您,还可以帮助其他对这个问题感到好奇的人。我自己也有过很多次,我有一个很长的方程,实际上不得不将方程的每个参数都转换为一个双精度值。

    【讨论】:

      【解决方案4】:

      尝试 (double)(1.0/2.0) - 这将给出您期望的答案。

      【讨论】:

        【解决方案5】:

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

        1d/2d=0.5
        

        【讨论】:

          【解决方案6】:
          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

          在前三种情况下,您将整数值(当您不使用 suffix 或不包含 dot 时,这是数字的默认类型)转换为 Double,然后在第一种情况下使用整数值进行除法,使用 double 进行 2和 3,与最后 (4) 情况相反,括号首先更改运算顺序您将两个整数相除,然后将结果转换为 Double。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-03-14
            • 2017-05-27
            • 2013-07-23
            • 2010-09-15
            • 1970-01-01
            • 2013-02-18
            • 2016-05-06
            相关资源
            最近更新 更多