2009-04-08 1 views
3

Есть ли какая-нибудь функция IsDouble() в VB6? Если я не ошибаюсь, двойной тип данных в VB6 эквивалентен float в SQL Server 2000. Ваш совет будет очень признателен.IsDouble() в VB6?

ответ

6
Function IsDouble(ByVal varValue As Variant) As Boolean 

    Dim dblTest As Double 

    On Error Resume Next 

    dblTest = CDbl(varValue) 

    IsDouble = Err.Number = 0 

End Function 
+0

Спасибо за ваши коды. Позвольте мне открыть фон, мне нужно проверить строковое значение, которое поступает из текстового файла, чтобы вставить в поле (тип данных с плавающей точкой SQL) таблицы базы данных (SQL Server 2000). –

+0

Будьте осторожны, что CDbl примет как входной сигнал. Я думаю, что он принимает следы бессмысленных персонажей. –

+0

Nevermind, я думал о функции Вала. Но если у вас есть международные пользователи, вы можете протестировать это и против них. Я думаю, что CDBl использует региональные настройки для преобразования. –

0

Функция IsNumeric(), которая должна работать достаточно хорошо. Если это не соответствует вашим потребностям, вы также можете объяснить, каким образом?

+0

Позволь мне раскрыть фон, мне нужно проверить значение строки, которая приходит из текстового файла, чтобы вставить в поле (SQL поплавкового типа данных) таблицы базы данных (SQL Server 2000). –

+0

Хорошо. Единственная проблема с IsNumeric заключается в том, что она позволит переполнение: число, которое слишком велико, чтобы вписаться в тип float. –

+0

Неправильно, он будет принимать только значения, которые вписываются в Double. (Стандарт IEEE 8-байтовый номер с плавающей запятой) – MarkJ

3

IsNumeric() в порядке, он будет принимать только значения, которые вписываются в парные разряды. Это регионально известно, т. Е. Для французских региональных настроек десятичный разделитель является запятой.

Я просто попробовал это в окне Immediate.

Debug.Print IsNumeric("4e308") 
False 

Определение VB6 двойной в руководстве «VB6 Двойные переменные хранятся в IEEE 64-бит (8 байт) числа с плавающей точкой в ​​диапазоне от значения в -1.79769313486232E308 до -4.94065645841247E-324 для отрицательных значений и от 4.94065645841247E-324 до 1.79769313486232E308 для положительных значений ".

Я думаю, что это то же самое, что и плагин SQL Server, проходящий онлайн docs. «Число данных с плавающей точностью чисел со следующими допустимыми значениями: -1.79E + 308 - -2.23E - 308, 0 и 2.23E + 308 - 1.79E + 308."

10

На самом деле вам намного лучше использовать функцию Vartype.

Private Function IsDouble(ByVal value As Variant) As Boolean 
    IsDouble = (VarType(value) = vbDouble) 
End Function 
1

Существует нет встроенного IsDouble функции доступна в VB6 вместо этого вы можете использовать встроенную IsNumeric функции. В противном случае вы можете использовать следующие пользовательские функции для достижения того же:

Function IsDouble(ByVal value As Variant) As Boolean 

    Dim convertedValue As Double 

On Error Goto EH 
    convertedValue = CDbl(value) 
    IsDouble = True 

Exit Function 
    EH: 
     IsDouble = False 
End Function