C#不同类型数值运算问题

本想着,从表中读取数据进行运算,但是不能直接除,显示System.InvalidCastException:“Unable to cast object of type 'System.Int32' to type 'System.Double'.”,请指点要怎么统一数据类型,用int可以,但是不显示小数。

var button3 = new ButtonCell("月均");
            sheet["D25"]= button3;
            button3.Click += (s, e) =>
            {
                double[,] monthhour = new double[12, 1];
                var hour1 = sheet.GetCellData("C25");
                
                for (int i = 0;i<12;i++)
                {
                    monthhour[i, 0] =(double) hour1 / 12;   //不能直接除?           
                };
                sheet.SetRangeData("C30:C41", monthhour);
            };

在C#中,不同的数值类型不能直接进行运算。解决方法是:

  1. 统一数据类型,全部使用double类型,这样就可以进行除法运算了。
    csharp
    double[,] monthhour = new double[12, 1];
    double hour1 = (double)sheet.GetCellData("C25");
    for (int i = 0;i<12;i++)
    {
    monthhour[i, 0] = hour1 / 12;
    };
  2. 也可以选择将int类型的数据先转换成double,然后再进行运算:
    csharp
    double[,] monthhour = new double[12, 1];
    int hour1 = sheet.GetCellData("C25");
    for (int i = 0;i<12;i++)
    {
    monthhour[i, 0] = (double)hour1 / 12;
    };
  3. 第三种方法是使用decimal类型,decimal类型可以更精确地表示小数,并可以进行除法运算。
    csharp
    decimal[,] monthhour = new decimal[12, 1];
    decimal hour1 = sheet.GetCellData("C25");
    for (int i = 0;i<12;i++)
    {
    monthhour[i, 0] = hour1 / 12;
    };
    所以,总结一下,要解决不同类型数据运算的问题,可以:
  4. 统一数据类型(推荐double)
  5. 进行数据类型转换(如int to double)
  6. 使用decimal类型
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    可以使用类型转换的方法,将不同类型的数值统一为同一类型,以便进行运算。具体的解决方案如下:

    1. 定义两个数值变量,一个为Int32类型,一个为Double类型。
    int numInt = 10;
    double numDouble = 3.14;
    
    1. 将Int32类型的值转换为Double类型的值。
    double numIntToDouble = Convert.ToDouble(numInt);
    
    1. 进行除法运算。
    double result = numIntToDouble / numDouble;
    
    1. 输出结果。
    Console.WriteLine("Result: " + result);
    

    提示:

    • 在进行数据类型转换时,可能会出现精度丢失或溢出的情况,需要注意数据范围。

    • 在进行除法运算时,要注意除数不能为0,否则会产生异常。

    • 可以使用Round函数来实现四舍五入,以保证运算结果的精度。如:result = Math.Round(result, 2); 表示保留两位小数。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^