如何将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;
}
}
}
}
更改第二个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];
-
totalRefurb
需要声明 a double:double totalRefurb = 0;
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检查