2010-11-30 12 views
1

Gestern hatte ich einen Blick auf, wie die Werte der Variablen aus nummbers in externen txt-DateienHinzufügen von Variablen numical Werte (newb Frage)

die Variablen dann aufaddiert werden müssen gespeichert einzustellen, so verwendete i Versuch und Irrtum ersten

((XWert) + (newVal))

unter der Annahme, dass XWert auf 10 gesetzt wurde und newVal auf 20 gesetzt wurde ich erwartet, dass die Antwort von dreißig zu bekommen, aber waqs mit dem neuen Wert von 10 20

präsentiert

VB.net pysicaly fügte die beiden Werte zusammen hinzu aber ich wollte das mathematische Produkt der beiden, die ist ((10) + (20)) = 30

yep its a newb Frage könnte jemand erklären, wie man das erreichen, was im affter

Antwort

4

XVAL und NEWVAL Strings sind, also werden sie einfach miteinander verkettet. Sie müssen sie in Ganzzahlen konvertieren, damit VB.NET sie als solche behandelt. Verwenden Sie dazu die Methode Int32.Parse().

Dim intXVAL As Integer = Int32.Parse(XVAL) 
Dim intNEWVAL as Integer = Int32.Parse(NEWVAL) 

Dim result = intXVAL + intNEWVAL 
+1

+1 für die Verwendung von Standard .NET BCL-Funktionen anstelle von VB-spezifischen Funktionen, die nur aus Gründen der Abwärtskompatibilität vorhanden sind. –

+0

@Adam: Ich weiß wirklich nicht, was mit dem VB-spezifischen Hass ist, aber ich werde Sie die gleiche Frage stellen, die Sie mich fragten: Haben Sie irgendeine Unterstützung für die Behauptung, dass Funktionen wie 'CInt' ausschließlich aus Gründen der Abwärtskompatibilität existieren ? Sie werden genau wie jede andere Funktion im Framework geschrieben und fügen einfach einige zusätzliche Funktionen hinzu, die für einen Neuling nützlich sind, um Ihre sogenannten "Standard" - "Parse" -Methoden zu verwenden. –

+1

@Cody: Sie sind nicht wie jede andere Funktion im Framework geschrieben; VB-spezifische Funktionen sind "klassenlos" (sie sind die einzigen verfügbaren "globalen Funktionen"). Sie sind nicht Teil der BCL und haben daher keine genauen Analoga in anderen .NET-Sprachen. Es gibt keinen Grund für nicht-traditionellen Code, Funktionen zu verwenden, die für eine Sprache spezifisch sind, wenn Dinge wie "Convert.ToInt32" existieren. Ich verstehe nicht, wie "CInt" (abgesehen davon, dass es nur aus vier Zeichen besteht) einfacher zu verstehen ist als "Convert.ToInt32" oder "Integer.Parse". –

1

Sie möchten sie zuerst in eine Zahl umwandeln. Versuchen Sie CDbl. Siehe http://msdn.microsoft.com/en-us/library/Aa263426 für mehr.

bearbeiten: Hoppla, dachte du sprichst über VBA. Versuchen Sie Double.Parse (YOURVALUE) zu verwenden, wenn Sie über VB.NET sprechen.

+0

Wenn Sie nicht den größeren Wertebereich einer Gleitkommazahl benötigen (auf Kosten der Genauigkeit), verwenden Sie sie nicht. –

+0

Er sagte nichts über Präzision, also wollte ich nur sicher sein :) – Jens

+0

@J. Vermeire: Das ist wahr, aber seine Beispielwerte sind ganze Zahlen, und wenn Sie einen Neuling mit Doppeln beginnen, wenn ganze Zahlen ausreichen, kann er sie einfach für alles verwenden. –

0

Haben Sie die Val() Funktion versucht?

Val(XVAL) + Val(NEWVAL) 
0

Wie Sie aus einer Textdatei lesen Ich gehe davon aus, dass Sie Ihre Werte aus als Strings lesen, so dass, wenn Sie dies tun:

((XVAL) + (NEWVAL)) 

Es ist effektiv die beiden Strings zusammen verketten. Um das mathematische Produkt der beiden Werte zu erhalten, müssen diese int/Ganzzahlen sein, was der Zahlentyp ist.

Es gibt eine Reihe von Möglichkeiten, wie Sie dies tun können, aber im Wesentlichen müssen Sie die Strings in Ints "werfen" und dann Ihre Berechnung durchführen.

So in vb.net wäre es so etwas wie diese (Pseudo-Code) sein:

Dim xval As String = "10" 
Dim newval As String = "20" 

Dim x As Integer = Int32.Parse(xval) 
Dim n As Integer = Int32.Parse(newval) 

Dim prod As Integer = x + n 

Console.WriteLine(prod) 

Es gibt dieses eine Reihe von anderen Methoden zu tun, zum Beispiel mit:

int.Parse(...) 

oder

Integer.TryParse(...) 

Mehr Informationen über diese Art von Typkonvertierungen finden Sie hier:

http://dotnetperls.com/integer-parse-vbnet

Eine Sache, mit dieser Art von Umwandlungen im Auge zu behalten ist, dass Sie, dass Ihre Eingabedaten konvertierbar sicher sein müssen. Andernfalls wird der Code Ausnahmen auslösen.Hier ist TryParse nützlich, da Sie damit die Eingaben überprüfen und ungültige Eingaben ohne Ausnahmen verarbeiten können.

0

Der + Operator in VB.NET (für Rückwärtskompatibilität Gründen) bedeutet sowohl hinzufügen und verketten je nach Art der Variablen, mit verwendet wird. Bei zwei numerischen Typen (Integer, Single, Double usw.) werden die Werte wie erwartet addiert. Mit String Typen verkettet es jedoch die zwei Zeichenfolgen.

Vermutlich dann, Ihre XVAL und NEWVAL Variablen sind String Typen, weil sie aus einer Textdatei gelesen werden, die VB.NET verursacht sie in eine neue Zeichenfolge verketten, anstatt sie zusammen hinzuzufügen. Um das erwartete Verhalten zu erhalten, müssen Sie sie in numerische Typen konvertieren.

Einige der anderen Antworten schlagen Gießen einfach die String-Werte in numerischen Typen Gießen (CInt, CSng, CDbl, etc.), aber das, als ob der von der Zeichenfolge enthaltenen Wert erwartete möglicherweise nicht nicht zu Zahl umgewandelt werden kann. Die Methode Int32.Parse löst eine Ausnahme aus, wenn der von der Zeichenfolge gehaltene Wert nicht als Zahl dargestellt werden kann. Dies ist besonders wichtig, wenn Sie Werte aus einer Textdatei lesen, bei denen bestimmte Randbedingungen nicht garantiert sind.

Stattdessen möchten Sie wahrscheinlich so etwas wie Int32.TryParse, verwenden, die einen Boolean Wert zurück, der angibt, ob die Konvertierung erfolgreich und wird nicht eine Ausnahme werfen.

+0

Gibt es Unterstützung für die Assertion, dass '+' nur aus Gründen der Abwärtskompatibilität für die Verkettung verwendet wird? '+' verkettet auch Zeichenfolgen in C# und Java und ist in modernen Sprachen ziemlich Standard. –

+0

@Adam: Du hast Recht mit anderen Sprachen, aber es ist nicht unbedingt Standard in VB, angesichts seiner traditionell losen Typisierung und der Tendenz vieler Entwickler, mit Optionen wie "Option Strict" zu arbeiten. Das Ampersand wurde speziell für String-Verkettungen in einer frühen Version von pre.NET Visual Basic eingeführt und wurde fast überall als Best Practice empfohlen. In der Tat ist es immer noch, nach jeder Version von [dieser Dokumentation] (http://msdn.microsoft.com/en-us/library/9c5t70w2.aspx) auf MSDN. –

+0

Interessant; Das war mir nicht bewusst. Angesichts der Spielereien, die VB.NET durchlaufen wird, um herauszufinden, was Sie meinen, ist es wahrscheinlich klüger, das kaufmännische Und-Zeichen zu verwenden. –