IsDouble() в VB6?

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


vb6
person Kyaw Thurein    schedule 08.04.2009    source источник


Ответы (5)


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

Private Function IsDouble(ByVal value As Variant) As Boolean
    IsDouble = (VarType(value) = vbDouble)
End Function
person Bigtoe    schedule 17.04.2009

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

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

Debug.Print IsNumeric("4e308") 
False

Определение VB6 Double в руководстве: «Переменные VB6 Double хранятся как 64-битные (8-байтовые) числа с плавающей запятой IEEE со значениями от -1,79769313486232E308 до -4,94065645841247E-324 для отрицательных значений и от 4,94065645841247E. от -324 до 1,79769313486232E308 для положительных значений".

Я думаю, что это то же самое, что и SQL Server с плавающей запятой, исходя из онлайн-документов . «Числовые данные с плавающей точностью со следующими допустимыми значениями: от -1,79E + 308 до -2,23E - 308, 0 и 2,23E + 308 до 1,79E + 308».

person MarkJ    schedule 08.04.2009

В VB6 нет встроенной функции IsDouble, вместо этого вы можете использовать встроенную функцию 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
person Sachin Pachkude    schedule 24.06.2016

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

person Joel Coehoorn    schedule 08.04.2009
comment
Позвольте мне раскрыть предысторию, мне нужно проверить строковое значение, которое поступает из текстового файла, чтобы вставить его в поле (тип данных SQL float) таблицы базы данных (SQL Server 2000). - person Kyaw Thurein; 08.04.2009
comment
Хорошо. Единственная проблема с IsNumeric тогда заключается в том, что он допускает переполнение: число, которое слишком велико, чтобы поместиться в тип с плавающей запятой. - person Joel Coehoorn; 08.04.2009
comment
Это неправильно, он будет принимать только те значения, которые соответствуют типу Double. (Стандартное IEEE 8-байтовое число с плавающей запятой) - person MarkJ; 08.04.2009
comment
MarkJ ... Вы имеете в виду, что любое значение, удовлетворяющее IsNumeric(), не всегда будет переполнять тип данных с плавающей запятой SQL 2K? Прав ли я, говоря это? - person Kyaw Thurein; 08.04.2009
comment
Я так думаю - я не очень хорошо знаком с SQL-сервером. Переменные VB6 Double хранятся в виде 64-битных (8-байтовых) чисел с плавающей запятой IEEE со значениями от -1,79769313486232E308 до -4,94065645841247E-324 для отрицательных значений и от 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений. - person MarkJ; 08.04.2009
comment
Поиск в Google t-sql float показывает это как размер, для тех, кто заинтересован: - 1,79E + 308 до -2,23E-308, 0 и 2,23E-308 до 1,79E + 308. Количество байтов варьируется от 4 до 8 в зависимости от заданной точности в экспоненциальном представлении (которую можно указать в t-sql): float(24) или меньше — 4 байта, большее — 8. float без размера по умолчанию равно float(53 ), максимальное допустимое значение. - person BobRodes; 13.04.2012

person    schedule
comment
Спасибо за ваши коды. Позвольте мне раскрыть предысторию, мне нужно проверить строковое значение, которое поступает из текстового файла, чтобы вставить его в поле (тип данных SQL float) таблицы базы данных (SQL Server 2000). - person Kyaw Thurein; 08.04.2009
comment
Однако будьте осторожны с тем, что CDbl примет в качестве входных данных. Я думаю, что он принимает конечные бессмысленные символы. - person Will Rickards; 08.04.2009
comment
Неважно, я думал о функции Вал. Но если у вас есть международные пользователи, вы можете проверить это и на них. Я думаю, что CDBl использует региональные настройки для преобразования. - person Will Rickards; 08.04.2009
comment
Я не думаю, что VB обрабатывает логические выражения подобным образом. - person Joel Coehoorn; 08.04.2009
comment
Вы можете заключить его в круглые скобки или вызвать функцию CBool, если хотите. Но вышеописанное работает. - person Will Rickards; 08.04.2009
comment
Хм... Я знаю, что у меня есть старый код, в котором я хотел построить логическое значение таким образом, но не смог. Поэтому я покопался (ваааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааууууууааауаааааааааааааааааааааааааааааааааааааааааааааааааааааа е которой)) в пример, то оказалось, что причиной была «политика компании» на моем тогдашнем рабочем месте). Старые привычки трудно умирают, я думаю. - person Joel Coehoorn; 08.04.2009
comment
Это будет работать, если IsDouble означает, что varValue может быть выражено как двойное. Это не сработает, если это означает тип varValue double, потому что он также будет принимать целые, длинные, валютные и одиночные типы и возвращать true. Это показывает вам, что большинство сбоев в разработке приложений связано с неправильно собранными требованиями, а не с неправильным выполнением. - person BobRodes; 13.04.2012