如何将int转换为double?

时间:2011-04-13 19:15:40

标签: c# syntax-error

我无法将我的int值转换为双精度值。我知道我必须施展他们,我正在努力做到这一点;但是C#仍然给我一个错误,将int转换为double并说我需要一个演员。此外,它在尝试获取值下的totalunits值时出错。它说:“ ** 一个名为'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;
                }
            }
        }
    }

6 个答案:

答案 0 :(得分:4)

更改第二个object[] values = new object[myDb.dbRdr.FieldCount];
values = new object[myDb.dbRdr.FieldCount];
object[] values2 = new object[myDb.dbRdr.FieldCount];

第一个是否要替换values的内容,第二个是否要声明一个自变量..

答案 1 :(得分:2)

您的问题与投射无关。这是因为您使用了两个名为values的不同变量:

object[] values = new object[myDb.dbRdr.FieldCount];
// ... snipped ...

// This is where the values error comes in
object[] values = new object[myDb.dbRdr.FieldCount];

答案 2 :(得分:2)

  1. totalRefurb需要声明一个双倍:
    double totalRefurb = 0;
  2. values问题已经得到解答。

答案 3 :(得分:2)

您并没有尝试将int转换为该行中的double; ToString()的结果是一个字符串,而不是一个int。如果values [1]中的对象是int,那么请改为:

totalUnits = (double)(int)values[1];

当然,如果将totalUnits实际声明为double而不是int,则效果会更好。

关于其他错误

  

名为“values”的局部变量无法在此范围内声明,因为它会为“值”赋予不同的含义,“值”已在父级或当前范围中用于表示其他值。

这是一个棘手的错误,会给很多人带来麻烦。 真正的问题是名为'values'的局部变量不能在此范围内声明,因为它会给'values'赋予不同的含义,'values'已经在父作用域中用来表示其他内容。如果你处理这个问题,那么编译错误就会消失。

换句话说,“值”指的是声明的代码大约三分之一的变量。您正试图在代码的一半处创建另一个名为“values”的变量。如果允许第二个声明,那么相同的名称(“值”)将引用此方法中的两个不同的东西。

答案 4 :(得分:0)

问题是您第二次声明变量值。这是不可能的,因为在相同的范围内,您已经拥有相同的变量。因此在第二种情况下只需使用:

values = new object[myDb.dbRdr.FieldCount];

答案 5 :(得分:0)

第二个对象[] values =

应该是

values =
要么 object [] values2 =

int to double conversion:

int i = 123; 双配音;

dub =(double)i;

来自数据库的数据类型是什么?

将DB数据类型转换为.Net,然后进行转换(如果可能)。

例如,SQL Server nvarchar列是字符串,int是Int32,bigint是Int64。

int i =(int)myDb.dbRdr [“IntColumnName”]; //如果允许空值,可能要进行空检查。

double d =(double)i;