добавление переменных числовых значений (новый вопрос) - PullRequest
1 голос
/ 30 ноября 2010

Вчера я посмотрел, как установить значения переменных из чисел, хранящихся во внешних текстовых файлах

Затем нужно было добавить переменные, поэтому сначала я использовал метод проб и ошибок

((XVAL) + (NEWVAL))

предполагая, что XVAL был установлен на 10, а NEWVAL был установлен на 20, я ожидал получить ответ тридцать, но waqs были представлены с новым значением 10 20

VB.net физически добавил два значения вместе, но я хотел получить математическое произведение двух, которое ((10) + (20)) = 30

Да, этот новый вопрос может кто-нибудь объяснить, как добиться того, что я делаю

Ответы [ 5 ]

4 голосов
/ 30 ноября 2010

XVAL и NEWVAL являются строками, поэтому они просто объединяются вместе.Вам нужно преобразовать их в целые числа, чтобы VB.NET рассматривал их как таковые.Для этого используйте метод Int32.Parse().

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

Dim result = intXVAL + intNEWVAL
1 голос
/ 30 ноября 2010

Вы хотите сначала привести их к числу. Попробуйте CDbl . Подробнее см. http://msdn.microsoft.com/en-us/library/Aa263426.

edit: Упс, подумал, что вы говорите о VBA. Попробуйте использовать Double.Parse (YOURVALUE), если вы говорите о VB.NET.

0 голосов
/ 30 ноября 2010

Оператор + в VB.NET (из соображений обратной совместимости) означает и сложение и объединение в зависимости от типов переменных, с которыми он используется.С двумя числовыми типами (Integer, Single, Double и т. Д.) Он складывает значения вместе, как и следовало ожидать.Однако с типами String он объединяет две строки.

Предположительно, тогда ваши XVAL и NEWVAL переменные имеют тип String, потому что они считываются из текстового файла,что заставляет VB.NET объединять их в новую строку вместо того, чтобы добавлять их вместе.Чтобы получить ожидаемое поведение, вам нужно преобразовать их в числовые типы.

В некоторых других ответах предлагается приведение просто приведения строковых значений к числовым типам (CInt, CSng, CDbl и т. д.), но это может работать не так, как ожидается, если значение, содержащееся в вашей строке, не может быть преобразовано в число.Метод Int32.Parse вызовет исключение, если значение, содержащееся в вашей строке, не может быть представлено в виде числа.Это особенно важно иметь в виду, если вы читаете значения из текстового файла, который не гарантированно придерживается каких-либо определенных ограничений.

Вместо этого вы, вероятно, захотите использовать что-то вроде .Int32.TryParse, который возвращает значение Boolean, указывающее, успешно ли выполнено преобразование, и не вызовет исключение.

0 голосов
/ 30 ноября 2010

Когда вы читаете из текстового файла, я предполагаю, что вы читаете свои значения в виде строк, поэтому, когда вы делаете это:

((XVAL) + (NEWVAL))

Эффективно объединяет две строки вместе. Чтобы получить математическое произведение двух значений, они должны быть целыми числами типа int / integer.

Есть несколько способов сделать это, но по сути вы должны «привести» строки к целым, а затем выполнить вычисления.

Так что на vb.net это будет примерно так (псевдокод):

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)

Существует ряд других способов сделать это, например, используя:

int.Parse(...)

или

Integer.TryParse(...)

Более подробную информацию об этих видах преобразования типов можно найти здесь:

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

При таких конверсиях следует помнить, что вы должны быть уверены, что ваши входные данные конвертируемы. В противном случае ваш код будет выдавать исключения. Вот где TryParse полезен, так как вы можете использовать его для проверки входов и обработки некорректных входов без исключений.

0 голосов
/ 30 ноября 2010

Вы пробовали функцию Val ()?

Val(XVAL) + Val(NEWVAL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...