Вы просто удаляете всю эту папку (obj \ Debug) из решения (не удаляйте ее из каталога) и пытаетесь опубликовать ее, безусловно, будет работать.
У Вас может быть переполнение, должное максимальный целочисленный размер; тип валюты на самом деле делает очень хорошо для больших количеств (но остерегайтесь любых региональных проблем). Посмотрите редактирования ниже для обсуждения Int64.
Согласно документации MSDN относительно IsNumeric:
IsNumeric возвращает True, если тип данных Выражения является булевской переменной, Байтом, Десятичным числом, дважды, Целым числом, Долго, SByte, Коротким, Единственным, UInteger, ULong, или UShort или Объект, который содержит один из тех числовых типов. Это также возвращает True, если Выражением является Символ или Строка, которая может быть успешно преобразована в число.
IsNumeric возвращает False, если Выражение имеет Дату типа данных или Объекта типа данных, и он не содержит числовой тип. IsNumeric возвращает False, если Выражением является Символ или Строка, которая не может быть преобразована в число.
Так как Вы получаете Несоответствие типов, возможно, Двойное вмешивается в преобразование. IsNumeric не гарантирует, что это - Целое число, просто что это соответствует одной из числовых возможностей. Если число является двойным, возможно, региональные настройки (запятая по сравнению с периодом и так далее) вызывают исключение.
Вы могли бы попытаться преобразовать его в двойное и затем в целое число.
' Using a couple of steps
Dim iValue As Integer
Dim dValue As Double
dValue = CDbl(SourceValue)
iValue = CInt(iValue)
' Or in one step (might make debugging harder)
iValue = CInt(CDbl(SourceValue))
Править: После Вашего разъяснения кажется, что Вы получаете водосливное преобразование. Сначала попытайтесь использовать Длинное и CLng () вместо CInt (). Существует все еще шанс, запись является Int64, хотя, который является более трудным использованием VB6.
Я использовал следующий код для LARGE_INTEGER и типов Integer8 (оба Int64), но он не может работать на Вашу ситуацию:
testValue = CCur((inputValue.HighPart * 2 ^ 32) + _
inputValue.LowPart) / CCur(-864000000000)
Этот пример был от примера истечения пароля LDAP, но как я сказал, что он может или не может работать в Вашем сценарии. Если у Вас нет типа LARGE_INTEGER, он похож:
Private Type LARGE_INTEGER
LowPart As Long
HighPart As Long
End Type
Поиск LARGE_INTEGER и VB6 для получения дополнительной информации.
Править: Для отладки может быть полезно временно избежать обработки ошибок и затем снова включить его после передачи строк беспокойства:
If IsNumeric(strMaxAlternatives) And strMaxAlternatives <> "" Then
On Error Resume Next
iGlobalMaxAlternatives = CInt(strMaxAlternatives)
If Err.Number <> 0 Then
Debug.Print "Conversion Error: " & strMaxAlternatives & _
" - " & Err.Description
EndIf
On Error Goto YourPreviousErrorHandler
End If
VB6 не обеспечивает хорошие методы гарантировать, что CInt не перестанет работать. Я нашел, что самый простой путь состоит в том, чтобы просто использовать обработку ошибок.
function TryParse(byval text as string, byref value as integer) as boolean
on error resume next
value = CInt(text)
TryParse = (err.number = 0)
endfunction
Конечно, Ваши предпочтения обработки ошибок могут варьироваться.
Ваш лучший выбор состоит в том, чтобы начать регистрировать ошибки с фактическими значениями, он работает с тем, таким образом, можно выяснить то, что продолжается.
Да. Попробуйте это:
If IsNumeric("65537") Then
Dim i As Integer
i = CInt("65537") 'throws an error on this line!
End If
Это переполнение, но я думаю, что оно иллюстрирует ненадежность IsNumeric () в целом (специально для ints - для, удваивается, это намного более надежно).
IsNumeric возвратит true, если он может преобразовать строку в число. Даже если существуют нечисловые символы в строке. Я всегда цикл, хотя строка один символ за один раз и тест каждый символ. Если один символ перестал работать затем, я могу возвратить ошибку.
Следующий код работает без ошибки Несоответствия типов в Visual BASIC 6
Dim I As Integer
I = CInt("3.41")
То же для этого варианта
Dim I As Integer
Dim TempS As String
TempS = "3.41"
I = CInt(TempS)
Регистрация рассматриваемого кода помогла бы ответить на Ваш вопрос. В основном существует несколько функций в VB6, которые используются для преобразования строк в число.
CInt и Международное преобразование в число, но дескриптор, округляющийся отличающийся. Прямое присвоение работает и эквивалентный использованию CInt. Howver я рекомендую продолжить использовать CInt, чтобы ясно дать понять операцию Вам и Вашим поддерживающим разработчикам в будущем.
Работы CInt над числом с запятыми как "3 041,41" Однако VB6 имеет проблему при обработке настроек региона поэтому при использовании нотации кроме стандартного американского варианта английского языка, Вы получите странные результаты и ошибки.
Согласно документации VB6, "IsNumeric возвращает True, если тип данных Выражения является булевской переменной, Байтом, Десятичным числом, дважды, Целым числом, Долго, SByte, Коротким, Единственным, UInteger, ULong, или UShort или Объект, который содержит один из тех числовых типов. Это также возвращает True, если Выражением является Символ или Строка, которая может быть успешно преобразована в число".
Многие из тех не могут быть преобразованы в Целое число. Например, "1.5" является числовым, но это не целое число. Так, можно преобразовать его в число, но не обязательно целое число.
Две опции...
Изменение
If IsNumeric(strMaxAlternatives) And strMaxAlternatives <> "" Then
iGlobalMaxAlternatives = CInt(strMaxAlternatives)
End If
Кому:
If IsNumeric(strMaxAlternatives) And strMaxAlternatives <> "" Then
iGlobalMaxAlternatives = CDbl(strMaxAlternatives) ' Cast to double instead'
End If
Или
If IsNumeric(strMaxAlternatives) And strMaxAlternatives <> "" Then
If CDbl(strMaxAlternatives) Mod 1 = 0 Then ' Make sure there\'s no decimal points'
iGlobalMaxAlternatives = CInt(strMaxAlternatives)
End If
End If
Только что нашел этот самородок. Если вы запустите следующее, то скрипт #1 вернет TRUE, но скрипт #2 & #3 выдаст ошибку:
SELECT ISNUMERIC('98,0') AS isNum -- Fails
SELECT CONVERT(INT, '98,0') -- Fails
SELECT CONVERT(NUMERIC(11,4), '98,0') -- Fails