Wie kann ich umwandeln int in ein double?
Ich habe Schwierigkeiten, meine Umwandlung int-Werte verdoppelt. Ich weiß, ich habe Sie gewirkt, und ich bin versucht, das zu tun; aber C# noch gibt mir eine Fehlermeldung, für die Umwandlung von int in double und sagt, brauche ich einen cast. Auch Es gibt mir eine Fehlermeldung bei dem Versuch erhalten Sie den Wert für totalunits unter Werte. er sagt: "**Eine lokale variable mit dem Namen 'Werte'cannot deklariert werden, in diesem Umfang, weil es geben würde, eine andere Bedeutung für "Werte", die bereits in einer übergeordneten oder aktuellen Bereich zu bezeichnen, einige andere auch. Im verwirrt über diesen Fehler, weil ich will, totalunits um die Werte zu ändern, wie gut. Kann somweone mir helfen? Danke.
Justin
Hier ist mein code:
//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;
}
}
}
}
while (true)
und diejenigen loswerden, die Verschachtelung if
's!Abgesehen von der syntax-Fehler, den Sie sehen, diese Methode ist betteln für einige Umgestaltung.
while(true)
ist manchmal ein nützliches Konstrukt. In diesem, aber es ist da, um alle die break
Aussagen in gotos. Gotos sind schlecht, ob Sie nun ausdrücklich oder nicht. (Von "gotos", ich meine natürlich "unstrukturierte fließt der Ausführung".) @gaearon ist Recht, das ist schrecklich.parametrisierte sql Mann!
InformationsquelleAutor Justin | 2011-04-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern Sie die zweite
object[] values = new object[myDb.dbRdr.FieldCount];
zu
values = new object[myDb.dbRdr.FieldCount];
oder
object[] values2 = new object[myDb.dbRdr.FieldCount];
Den ersten wenn Sie möchten, ersetzen Sie den Inhalt
values
, die zweite, wenn Sie möchten, deklarieren Sie eine unabhängige variable..InformationsquelleAutor Albin Sunnanbo
Dein problem hat nichts zu tun mit Gießen. Es ist, weil Sie zwei verschiedene Variablen benannt
values
:InformationsquelleAutor JSBձոգչ
totalRefurb
werden müssen erklärt eine doppelte:double totalRefurb = 0;
values
problem schon beantwortet wurde.InformationsquelleAutor Shadow Wizard
Sind Sie nicht versuchen, zu konvertieren von int zu double in, line; das Ergebnis von ToString() ist eine string -, keine int. Wenn das Objekt im Werte[1] ist ein int, dann tun Sie dies:
Natürlich funktioniert dies besser, wenn totalUnits ist tatsächlich erklärte ein double statt int.
Bezüglich der anderen Fehler
Dies ist eine schwierige Fehler, die eine Menge Leute Probleme. Die real problem ist, dass eine lokale variable mit dem Namen 'Werte' deklariert werden können, in diesem Umfang, weil es geben würde, eine andere Bedeutung für "Werte", die bereits in einem übergeordneten Bereich zu bezeichnen etwas anderes. Wenn Sie sich mit diesem problem, dann wird die compile-Fehler geht Weg.
In anderen Worten, "Werte" bezieht sich auf die variable, die deklariert wird, über ein Drittel der Weg nach unten der code. Sie versuchen, erstellen Sie eine weitere variable mit dem Namen "Werte" mit knapp über einer halben Wege durch den code. Wenn das zweite Erklärung durften, dann den gleichen Namen ("Werte") würde beziehen sich auf zwei verschiedene Dinge innerhalb dieser Methode.
Behoben. Danke!
InformationsquelleAutor Jeffrey L Whitledge
Das problem ist, dass Sie die Deklaration Ihrer Variablen Werte ein zweites mal. Ist dies nicht möglich, da im gleichen Bereich haben Sie bereits die gleiche variable. Also im zweiten Fall verwenden Sie einfach:
InformationsquelleAutor
Dem zweiten object[] Werte =
Sollte
Werte =
ODER
object[] values2 =
Int -, double-conversion:
int i = 123;
Doppel-dub;
dub = (double)i;
Was ist der Datentyp aus der Datenbank kommen?
Konvertieren die DB-Datentyp ein .Net ein und führen Sie dann den cast (wenn möglich).
Beispielsweise(s), ein SQL Server-Datentyp nvarchar-Spalte string, int Int32 und bigint ist Int64.
int i = (int)myDb.dbRdr["IntColumnName"]; //Vielleicht wollen Sie eine null-überprüfen Sie, ob null-Werte zulassen.
double d = (double)i;
InformationsquelleAutor Jon Raynor