如何将int转换为double?

| 我在将int值转换为double时遇到麻烦。我知道我必须抛弃它们,而我正在尝试这样做。但是C#仍然给我一个将int转换为double的错误,并说我需要强制转换。也给我一个错误,试图获取值下的totalunits值。它说:\“ **不能在此范围中声明名为\'values \'的局部变量,因为它将赋予\'values \'不同的含义,该值已在父范围或当前范围中用于表示其他值我对此错误感到困惑,因为我也希望totalunits也更改值。somweone可以帮助我吗? 贾斯汀 这是我的一些代码:
//Get the Refurb_Rate for the day


private double GetRefurbRate()
{
    string sql = \"\";
    double Refurb_Rate = 0;
    int totalRefurb = 0;
    int totalUnits = 0;
    string error_msg = \"\";

        //Getting the value for sql for totalRefurb
        sql = \"SELECT COUNT(distinct rp.repair_ord) \" +
           \"FROM \" + schema + \".repair_part rp \" +
           \"WHERE rp.repair_type = \'REFURB\' and rp.created_date > \'\" + DateTime.Now.ToString(\"d-MMM-yyyy\") + \"\' \";


        while (true)
        {
            if (!myDb.RunSql(sql, true))
            {
                error_msg = \"DBError for getting Refurb Rate\";
                break;
            }
            if (myDb.dbRdr.HasRows)
            {
                if (myDb.dbRdr.Read())
                {


                    object[] values = new object[myDb.dbRdr.FieldCount];
                    myDb.dbRdr.GetValues(values);
                    Console.WriteLine(values[0].ToString());
                    totalRefurb = Convert.ToDouble(values[0].ToString());());// This is where convert to double error comes in.


                    //Getting the value from sql for totalUnits
                    sql = \"SELECT count(distinct rp.repair_ord) \" +
                        \"FROM \" + schema + \".repair_part rp \" +
                        \"WHERE rp.repair_type = \'REFURB\' and rp.ref_desig is null  and rp.created_date > \'\" + DateTime.Now.ToString(\"d-MMM-yyyy\") + \"\' \";

                    while (true)
                    {
                        if (!myDb.RunSql(sql, true))
                        {
                            error_msg = \"DBError for getting Refurb Rate\";
                            break;
                        }
                        if (myDb.dbRdr.HasRows)
                        {
                            if (myDb.dbRdr.Read())
                            {

                                // This is where the values error comes in
                                object[] values = new object[myDb.dbRdr.FieldCount];
                                myDb.dbRdr.GetValues(values);
                                Console.WriteLine(values[1].ToString());
                                totalUnits = Convert.ToDouble(values[1].ToString());// This is where convert to double error comes in.

                                try
                                {

                                    //Formula for Refurb Rate
                                    Refurb_Rate = totalRefurb / totalUnits * 100;


                                }
                                catch (Exception e)
                                {
                                    Console.WriteLine(e);
                                }

                            }

                        }

                        break;
                    }
                    myDb.dbRdr.Close();

                    if (error_msg != String.Empty)
                    {
                        MessageBox.Show(error_msg, \"Get Refurb Rate\",
                                        MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    }

                    return Refurb_Rate;
                }
            }
        }
    }
    
已邀请:
更改第二个
object[] values = new object[myDb.dbRdr.FieldCount];
values = new object[myDb.dbRdr.FieldCount];
object[] values2 = new object[myDb.dbRdr.FieldCount];
如果要替换
values
的内容,则第一个;如果要声明自变量,则第二个。     
您的问题与铸造无关。这是因为您使用了两个名为
values
的变量:
object[] values = new object[myDb.dbRdr.FieldCount];
// ... snipped ...

// This is where the values error comes in
object[] values = new object[myDb.dbRdr.FieldCount];
    
7ѭ需要声明为双精度:
double totalRefurb = 0;
values
问题已经回答。     
您并不是要在该行中将int转换为double; ToString()的结果是字符串,而不是int。如果values [1]中的对象是一个int,则改为:
totalUnits = (double)(int)values[1];
当然,如果将totalUnits实际声明为double而不是int,则效果更好。 关于其他错误   在此范围内无法声明名为\'values \'的局部变量,因为它将赋予\'values \'不同的含义,该值已在父范围或当前范围中用于表示其他含义。 这是一个棘手的错误,给很多人带来了麻烦。真正的问题是,无法在此范围内声明名为\'values \'的局部变量,因为它将赋予\'values \'不同的含义,该值已在父范围中用于表示其他内容。如果您处理该问题,那么编译错误就会消失。 换句话说,“值”是指在代码下移大约三分之一处声明的变量。您正试图在代码的一半以上创建另一个名为\“ values \”的变量。如果允许第二个声明,则相同的名称(\“ values \”)将引用此方法内的两个不同事物。     
问题是您第二次声明变量值。这是不可能的,因为在同一范围内,您已经具有相同的变量。因此,在第二种情况下,只需使用:
values = new object[myDb.dbRdr.FieldCount];
    
第二个object []的值= 应该 值= 要么 object [] values2 = 将int转换为double: 整数i = 123; 双重配音 dub =(double)i; 来自数据库的数据类型是什么? 将DB数据类型转换为.Net数据类型,然后进行强制转换(如果可能)。 例如,SQL Server的nvarchar列为string,int为Int32,bigint为Int64。 int i =(int)myDb.dbRdr [\“ IntColumnName \”]; //如果允许空值,可能要进行空检查。 double d =(double)i;     

要回复问题请先登录注册