如何将int型转换为double型

本文关键字:转换 double int | 更新日期: 2023-09-27 17:50:19

我有麻烦转换我的int值为双精度。我知道我必须给他们选演员,我正在努力做到这一点;但是c#仍然给我一个将int转换为double的错误,并说我需要强制类型转换。它也给了我一个错误,试图获得值下的总单位的值。它说:"**一个名为'values'的局部变量不能在这个作用域中声明,因为它会给'values'一个不同的含义,而'values'已经在父作用域或当前作用域中用来表示其他东西了。我对这个错误感到困惑,因为我希望totalunits也改变值。有人能帮帮我吗?谢谢你。

贾斯汀

下面是我的一些代码:

//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;
                }
            }
        }
    }

如何将int型转换为double型

更改第二个object[] values = new object[myDb.dbRdr.FieldCount];
to values = new object[myDb.dbRdr.FieldCount];
or 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];
  1. totalRefurb需要声明 a double:
    double totalRefurb = 0;
  2. values问题已经解决。

你不是在尝试将整型转换为双精度;ToString()的结果是字符串,而不是int。如果values[1]中的对象是int型,则这样做:

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

当然,如果将totalUnits实际声明为双精度而不是整型,则效果会更好。

关于另一个错误

一个名为"values"的局部变量不能在这个作用域中声明,因为它会给"values"一个不同的含义,而"values"已经在父作用域或当前作用域中用来表示其他变量了。

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

换句话说,"values"指的是在代码三分之一处声明的变量。您试图在代码进行到一半的时候创建另一个名为"values"的变量。如果允许第二个声明,那么相同的名称("values")将在该方法中引用两个不同的东西。

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

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

第二个对象[]values =

应该是

=
或Object [] values2 =

int型到双精度的转换:

int I = 123;双配音;

dub = (double)i;

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

将DB数据类型转换为。net类型,然后进行强制类型转换(如果可能的话)。

例如,SQL Server的nvarchar列为string, int为Int32, bigint为Int64。

int i = (int)myDb.dbRdr["IntColumnName"];//如果允许null值,可能需要做null检查