2010-11-30 10 views
1

Hier j'eu un regard sur la façon de définir les valeurs des variables de nummbers stockées dans des fichiers txt externesles variables valeurs numical ajoutant (question newb)

les variables alors nécessaires pour ajouter de façon à ce que j'ai utilisé tâtonnement premier

((xVal) + (newVal))

en supposant que xVal a été fixé à 10 et newVal a été fixé à 20 i attendu pour obtenir la réponse de trente mais waqs présenté avec la nouvelle valeur de 10 20

VB.net pysicaly a ajouté les deux valeurs ensemble mais je voulais que le produit mathématique des deux qui est ((10) + (20)) = 30

yep sa question newb quelqu'un pourrait-il expliquer comment réaliser ce que im affter

Répondre

4

XVAL et NEWVAL sont des chaînes, donc ils sont simplement concaténés ensemble. Vous devez les convertir en entiers, afin que VB.NET les traite comme tels. Pour ce faire, utilisez la méthode Int32.Parse().

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

Dim result = intXVAL + intNEWVAL 
+1

+1 pour utiliser les fonctions .NET BCL standard plutôt que les fonctions spécifiques à VB qui ne sont présentes que pour la rétrocompatibilité. –

+0

@Adam: Je ne sais vraiment pas ce qu'est la haine spécifique à VB, mais je vais vous poser la même question que vous m'avez posée: avez-vous un support pour l'affirmation que des fonctions comme 'CInt' existent exclusivement pour la rétrocompatibilité ? Ils sont écrits comme n'importe quelle autre fonction dans le framework, et ajoutent simplement des fonctionnalités supplémentaires qui sont pratiques pour un débutant à vos méthodes "standard" 'Parse'. –

+1

@Cody: Ils ne sont pas écrits comme toutes les autres fonctions du framework; Les fonctions spécifiques à VB sont "sans classe" (ce sont les seules "fonctions globales" disponibles). Ils ne font pas partie de la BCL et n'ont donc pas d'analogues précis dans d'autres langages .NET. Il n'y a aucune raison pour que le code non hérité utilise des fonctions spécifiques à une langue lorsque des choses comme 'Convert.ToInt32' existent. Je ne vois pas comment 'CInt' (à part être seulement quatre caractères) pourrait être plus simple à comprendre que' Convert.ToInt32' ou 'Integer.Parse'. –

1

Vous souhaitez d'abord les convertir en un nombre. Essayez CDbl. Voir http://msdn.microsoft.com/en-us/library/Aa263426 pour plus.

edit: Oups, vous pensiez que vous parliez de VBA. Essayez d'utiliser Double.Parse (YOURVALUE) si vous parlez de VB.NET.

+0

Sauf si vous avez besoin de la plus grande plage de valeurs d'un nombre à virgule flottante (au détriment de la précision), ne les utilisez pas. –

+0

Il n'a rien dit sur la précision, donc je voulais juste être sûr :) – Jens

+0

@J. Vermeire: Assez vrai, mais ses valeurs d'exemple sont des entiers, et si vous commencez un novice avec des doubles quand les nombres entiers le feront, il peut juste les utiliser pour tout. –

0

Avez-vous essayé la fonction Val()?

Val(XVAL) + Val(NEWVAL) 
0

Comme vous lisez à partir d'un fichier texte je suppose que vous lisez vos valeurs comme des chaînes, donc quand vous faites ceci:

((XVAL) + (NEWVAL)) 

Il est concaténer efficacement les deux chaînes ensemble. Afin d'obtenir le produit mathématique des deux valeurs, celles-ci doivent être int/entiers, ce qui est le type de nombre.

Il y a un certain nombre de façons de faire cela, mais en substance vous devez 'lancer' les chaînes en entiers et ensuite faire votre calcul.

Donc vb.net ce serait quelque chose comme ça (code pseudo):

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) 

Il y a un certain nombre d'autres méthodes de le faire, par exemple en utilisant:

int.Parse(...) 

ou

Integer.TryParse(...) 

Plus d'informations sur ce type de conversions de type peuvent être trouvés ici:

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

Une chose à garder à l'esprit avec ces sortes de conversions est que vous devez être certain que vos données d'entrée est convertable. Sinon, votre code lèvera des exceptions.C'est là que TryParse est utile car vous pouvez l'utiliser pour vérifier les entrées et gérer les entrées invalides sans avoir besoin d'exceptions.

0

L'opérateur + en VB.NET (pour des raisons de compatibilité ascendante) signifie les deux ajouter et concaténer en fonction des types des variables qu'il est utilisé avec. Avec deux types numériques (Integer, Single, Double, etc.), il ajoute les valeurs ensemble comme vous le souhaitez. Cependant, avec String types, il concatène les deux chaînes.

On peut donc présumer, vos variables XVAL et NEWVAL sont String types parce qu'ils sont en cours de lecture d'un fichier texte, ce qui est à l'origine VB.NET les concaténer dans une nouvelle chaîne au lieu de les additionner. Pour obtenir le comportement que vous attendez, vous devez les convertir en types numériques.

Certains des autres réponses suggèrent coulée casting simplement les valeurs de chaîne pour les types numériques (CInt, CSng, CDbl, etc.), mais cela peut ne pas fonctionner comme prévu si la valeur contenue par votre chaîne ne peut pas être convertie en nombre. La méthode Int32.Parse lèvera une exception si la valeur détenue par votre chaîne ne peut pas être représentée comme un nombre. Cela est particulièrement important à garder à l'esprit si vous lisez des valeurs d'un fichier texte qui ne sont pas garanties d'adhérer à des contraintes particulières.

Au lieu de cela, vous voulez probablement utiliser quelque chose comme Int32.TryParse, qui renvoie une valeur Boolean indiquant si oui ou non la conversion a réussi et ne lancera pas une exception.

+0

Tout support pour l'affirmation que '+ 'est utilisé pour la concaténation uniquement pour des raisons de compatibilité descendante? '+' concatène également les chaînes en C# et Java, et est assez standard dans les langages modernes. –

+0

@Adam: Vous avez raison sur les autres langages, mais ce n'est pas forcément standard dans VB, étant donné sa typographie lâche et la tendance de beaucoup de développeurs à travailler avec des choses comme 'Option Strict'. L'esperluette a été introduite * spécifiquement * pour la concaténation de chaînes dans une version antérieure de pre-.NET Visual Basic et a été presque universellement recommandée comme meilleure pratique. En fait, il est toujours, selon chaque version de [cette documentation] (http://msdn.microsoft.com/en-us/library/9c5t70w2.aspx) sur MSDN. –

+0

Intéressant; Je n'étais pas au courant de ça. Compte tenu des manigances que VB.NET va traverser pour comprendre ce que vous voulez dire, il est probablement plus sage d'utiliser l'esperluette. –

Questions connexes