【问题标题】:Can't find location of implicit cast [closed]找不到隐式转换的位置[关闭]
【发布时间】:2017-01-10 13:09:26
【问题描述】:

我正在尝试为我的作业查找两个给定数字数组的总数,但我一直收到错误消息:

无法将类型“double”隐式转换为“int”。存在显式转换(您是否缺少演员表?)

int[] firstarray= new int[4] { 4, 20, 60, 150 };
double[] secondarray= new double[4] { 5, 40.5, 65.4, 145.98 };

firstarray[0] = 20;
secondarray[1] = 5;

int totalarrays = firstarray[0] + secondarray[1];
Console.WriteLine("Total of the two arrays " + totalarrays);

【问题讨论】:

  • int totalarays = firstarray[0] + secondarray[1]; 你正在用一个 double 做数学运算,并试图将它包含在整数 totalarays 中。
  • 你看错了吗?
  • var totalarrays = firstarray[0] + secondarray[1];(请注意,var)并让编译器为您找出类型。
  • 错误的意思正是它所说的 - 你试图在一个 int 中放入一个 double 但没有从 double 到 int 的隐式转换(也不应该有,因为它会导致潜在的信息丢失)。

标签: c#


【解决方案1】:
int totalarays = firstarray[0] + secondarray[1];

应该是

double totalarays = firstarray[0] + secondarray[1];

int + 一个doubledouble 结尾。如果不是这样,您将失去结果中 double 的精度 - 没有隐含的方法可以做到这一点。

如果您需要将double 转换为int,则有many different techniques,具体取决于您的要求。

【讨论】:

    【解决方案2】:

    当你这样做时

    int totalarays = firstarray[0] + secondarray[1];
    

    您正在尝试添加一个双精度数 (secondarray[1]) 和一个整数 (firstarray[0]),并将结果转换为一个整数。这可能会丢失精度,因为双精度值的小数部分将通过向下舍入来删除。这就是编译器警告您的内容。

    为了表示您对此感到满意,您可以这样写:

    int totalarays = firstarray[0] + (int)secondarray[1];
    

    这是显式地将 double 值转换为 int,通过强制转换。

    【讨论】:

      【解决方案3】:

      这应该可行。

      int totalarrays = firstarray[0] + Int32.Parse(secondarray[1].ToString());
      

      【讨论】:

        猜你喜欢
        • 2012-06-24
        • 1970-01-01
        • 2021-07-26
        • 1970-01-01
        • 2018-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-29
        相关资源
        最近更新 更多