【问题标题】:Divide 2 ints and get a double in C#在 C# 中除以 2 个整数并获得一个双精度数
【发布时间】:2019-08-13 20:42:56
【问题描述】:

我是初学者。以下两种情况都提供相同的输出,但在编译时它们是否完全相同?如果不是,在哪种情况下使用其中一种更可取?

        int num1 = 1001;
        int num2 = 505;
        double num11 = num1;


        double result1 = num11 / num2;
        double result2 = (double)num1 / num2;   //  or (double)num1 / (double)num2;

        Console.WriteLine("result1 = " + result1);
        Console.WriteLine("result2 = " + result2);


        /* Output:
        result1 = 1.98217821782178
        result2 = 1.98217821782178
        */

【问题讨论】:

  • 在你的例子的第三行你正在做implicit cast。所以实际上这两种方法都是一样的
  • 如果您想在运行代码时查看这些值,您始终可以设置一个断点并单步执行它以查看它的行为方式。 docs.microsoft.com/en-us/visualstudio/debugger/…
  • 在您的简单情况下,使用 num11(将 num1 转换为双精度)等效于使用 (double) num1(将 num1 转换为双精度)。但是,涉及浮点数转换的操作可能会变得棘手并产生令人惊讶的结果,您可以在此处阅读:stackoverflow.com/questions/8795550/…。由于您是初学者,这对您来说可能仍然有点过于技术性,但您最好谨慎对待浮点转换的可能影响......

标签: c# casting int double divide


【解决方案1】:

在第一个版本中,调用隐式转换将num1 转换为double。在第二种情况下,您使用显式强制转换来做同样的事情。在这种情况下,这两种方法是相同的,但隐式和显式转换不需要相同。

我认为显式转换更可取,因为它更清楚地了解正在发生的事情并且不需要初始化新变量。

【讨论】:

    【解决方案2】:

    如果 C# 中的任何参数是双精度,则使用双除法,结果为双精度。 有关更多信息,请参阅: https://www.dotnetperls.com/numeric-casts

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      相关资源
      最近更新 更多