2017-06-30 1 views
-3

Ich möchte die vorherige Nummer und die aktuelle Nummer hinzufügen. Hier habe Beispiel, aber mit Fehler.For Schleife - Summe alle Nummer - geschlossen

for (int i = 0; i < e.MasterRecord.DetailCount; i++)  
{  
    sumIdosage += Convert.ToDecimal(e.MasterRecord.GetDetailRecord(i).UDF["Dosage"]); 

    // i want to sum all the dosage  
} 

TxtBox5.Text = sumIdosage.ToString(); 

if (Convert.ToDecimal(TxtBox5.Text) < 100)  
{  
    MessageBox.Show("Your Dosage is less than 100%");  
} 

aber am Ende die Antwort unterschiedlich sind, wie das Bild dropbox.com/s/zav68w79hwa20ss/11.JPG?dl=0

+0

Was ist der Fehler? – code4life

+0

die Summe sind anders als die Formel wie das Bild ich teile dropbox.com/s/zav68w79hwa20ss/11.JPG?dl=0 – ChengWan

+0

Der Code selbst sieht gut aus. Aber warum testen Sie 'TxtBox5' Wert? Der if-Test für <100 sollte gegen die "sumIdosage" sein, IMHO. Debugger ist auch dein Freund. Setzen Sie einen Debug-Punkt in die Zeile, in der die Addition stattfindet, und sehen Sie sich an, wie sich der Variablenstatus ändert. Stecke Uhren als auch, und sehen, was mit der Variablen vor sich geht, mit dem Wert des Detaildatensatz, etc. Es ist die beste (und schnellsten) Weg, dies zu lösen, wenn man darüber nachdenkt. – code4life

Antwort

0

Sie einfach den letzten Wert sumIdosage zuweisen Hinzufügen von nichts an anderer Stelle. Sie müssen sumIdosage-0 vor der Schleife initialisieren, dann sumIdosage += ...

tun Auch macht es keinen Sinn, die Dezimalzahl in String zu konvertieren, und wieder zurück in Dezimalzahlen:

TxtBox5.Text = sumIdosage.ToString(); 
if (Convert.ToDecimal(TxtBox5.Text) < 100) 

Statt nur tun:

if (sumIdosage < 100) 
+0

Wenn ich + verwende = die Zahl springt von (i1) + (i2) = Summe1 nach dieser Summe1 + (i1) + (i2) + (i3) = Summe2 und so weiter .. – ChengWan

+0

['x + = y'] (https://msdn.microsoft.com/en-us/library/sa7629ew(v=vs.71).aspx) ist die Abkürzung für 'x = x + y' – Ian

+0

ja ich kenne diese Logik, ich benutze drittens Party-Software, um das Programm zu bearbeiten. Ich hatte keine Ahnung, warum es so werden wird. Diese Logik ist bereits richtig, um den Benutzer ein Key-In zu machen, das Hauptproblem ist die + = Logik .. irgendeine Idee? – ChengWan

0
sumIdosage += Convert.ToDecimal(e.MasterRecord.GetDetailRecord(i).UDF["Dosage"]);------ 
+0

wenn ich + verwende = die Zahl springt von (i1) + (i2) = sum1 nach dieser Summe1 + (i1) + (i2) + (i3) = sum2 und so weiter .. – ChengWan

+0

@ChengWan das ist falsch, es wird (i1) + (i2) + (i3) + (i4) ... zum Beispiel, wenn die Werte sind "[3, 2, 4, 8] 'der erste Lauf wird' 0 + 3' sein, der zweite wird '3 + 2' sein, der dritte wird' 5 +4' sein, der vierte wird '9 +8' sein, dein Endergebnis wird der sein korrekter Wert '17' – McAden

+0

Dies ist genau der gleiche Code, der in der Frage vorhanden ist ... Auch komplette fehlende Erklärung macht es völlig nutzlos Antwort. –

0

können Sie eine Liste erstellen, um alle Beträge aus dem aktuellen zu setzen und weiter wie folgt aus:

List<Decimal> sumOfCurrPrev = new List<Decimal>(); 
for (int i = 0; i < e.MasterRecord.DetailCount-1; i++)  
{  
    sumOfCurrPrev.Add(Convert.ToDecimal(e.MasterRecord.GetDetailRecord(i).UDF["Dosage"])+Convert.ToDecimal(e.MasterRecord.GetDetailRecord(i+1).UDF["Dosage"])); 
} 

In der Liste sind alle Summen. Zum Beispiel in sumOfCurrPrev[0] ist die Summe aus Convert.ToDecimal(e.MasterRecord.GetDetailRecord(0).UDF["Dosage"])+Convert.ToDecimal(e.MasterRecord.GetDetailRecord(1).UDF["Dosage"]), in sumOfCurrPrev[1] ist die Summe aus Convert.ToDecimal(e.MasterRecord.GetDetailRecord(1).UDF["Dosage"])+Convert.ToDecimal(e.MasterRecord.GetDetailRecord(2).UDF["Dosage"]) und so weiter

Wenn Sie die aktuellen und vorherigen wollen Sie dies tun können:

List<Decimal> sumOfCurrPrev = new List<Decimal>(); 
    for (int i = 1; i < e.MasterRecord.DetailCount; i++)  
    {  
     sumOfCurrPrev.Add(Convert.ToDecimal(e.MasterRecord.GetDetailRecord(i-1).UDF["Dosage"])+Convert.ToDecimal(e.MasterRecord.GetDetailRecord(i).UDF["Dosage"])); 
    } 
+1

Sie erhalten eine 'IndexOutOfRangeException', verwenden Sie' i Ian

+0

danke;) Ich habe meine Antwort aktualisiert. –

0

Ihre += Logik ist korrekt. Angenommen, e.MasterRecord.DetailCount ist, was es scheint, und e.MasterRecord.GetDetailRecord(i).UDF["Dosage"] tut, was es zu tun scheint es scheint, als gäbe es wirklich nur 2 Optionen.

Entweder:

  1. Die obigen Annahmen sind falsch
  2. sumIdosage enthalten bereits eine Art von Wert, bevor Sie Ihre Summierung fangen.

Diese sollte Arbeit

decimal sumIdosage = 0; 
for (int i = 0; i < e.MasterRecord.DetailCount; i++)  
{  
    sumIdosage += Convert.ToDecimal(e.MasterRecord.GetDetailRecord(i).UDF["Dosage"]); 
} 

TxtBox5.Text = sumIdosage.ToString(); 
if (sumIdosage < 100)  
{  
    MessageBox.Show("Your Dosage is less than 100%");  
}