Страница: 1 | 2 |
Вопрос: проблема с Long
Добавлено: 21.02.07 21:47
Автор вопроса: ZoomerSD | ICQ: 148640473
Я что-то недопонимаю в этой жизни..
Как этот код может выдать overflow?!
Dim a as Long
a = 422*1000
Ответы
Всего ответов: 28
Номер ответа: 1
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #1
Добавлено: 21.02.07 22:25
Debug.Print CLng(422) * 1000
недопонимаешь в теории.
Номер ответа: 2
Автор ответа:
W[4Fh]LF
Вопросов: 0
Ответов: 187
Web-сайт:
Профиль | | #2
Добавлено: 21.02.07 22:32
Судя по-всему ошибка в анализаторе компилятора, потому, что на самом деле никакого умножения не происходит. Если такую программу скомпилировать, то в ней явным образом будет прописан вызов процедуры:
00401917 FF15 4C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaError>; MSVBVM60.__vbaErrorOverflow
Так, что пиши так:
Dim a As Long, b As Long
b = 422
a = b * 1000
А это ещё один камень в сторону ВБ
Номер ответа: 3
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #3
Добавлено: 21.02.07 22:45
Private Sub Form_Load()
 im a As Long
a = 2147483647
a = 422 * 1000 'Эту закомментировать
a = 422000
End Sub
Я тож удивился когда протестил
Номер ответа: 4
Автор ответа:
ZoomerSD
ICQ: 148640473
Вопросов: 135
Ответов: 270
Профиль | | #4
Добавлено: 21.02.07 22:59
не всё так просто.. полный код выглядит примерно также как писал W[4Fh]LF и толку ноль.. ошибка всё равно вылетает.
Номер ответа: 5
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #5
Добавлено: 21.02.07 22:59
Кстати, EUGY, мы все недопонимает теории, блясни умом! просвяти ))
Номер ответа: 6
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #6
Добавлено: 21.02.07 23:01
Тот код, что писал W[4Fh]LF работает, так что у тебя - твоё "примерно"
Второй вариант решения - так как предложил EUGY - пользоватся преобразованием типов
Номер ответа: 7
Автор ответа:
ZoomerSD
ICQ: 148640473
Вопросов: 135
Ответов: 270
Профиль | | #7
Добавлено: 21.02.07 23:06
воспользовался преобразованием типов. заработало.. непонимаю, почему так?
Номер ответа: 8
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #8
Добавлено: 21.02.07 23:06
тестоните ктонить в 2007 офисе, в 2003 - тож глюк.
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 21.02.07 23:07
Потому что Билл Гейтс мудак!
Номер ответа: 10
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #10
Добавлено: 21.02.07 23:30
Ну ты блеснул.
Номер ответа: 11
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #11
Добавлено: 21.02.07 23:39
Тебе же этот м-к написал в MSDN
Visual Basic for Applications Reference
Overflow (Error 6)
An overflow results when you try to make an assignment that exceeds the limitations of the target of the assignment. This error has the following causes and solutions:
The result of an assignment, calculation, or data type conversion is too large to be represented within the range of values allowed for that type of variable.
Assign the value to a variable of a type that can hold a larger range of values.
An assignment to a property exceeds the maximum value the property can accept.
Make sure your assignment fits the range for the property to which it is made.
You attempt to use a number in a calculation, and that number is coerced into an integer, but the result is larger than an integer. For example:
 im x As Long
x = 2000 * 365 ' Error: Overflow
To work around this situation, type the number, like this:
 im x As Long
x = CLng(2000) * 365
Номер ответа: 12
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #12
Добавлено: 21.02.07 23:58
БГ прямо знал, что ты когда подрастешь спросишь про ЭТО...
Номер ответа: 13
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #13
Добавлено: 22.02.07 10:24
Указывай сзади числа суффикс типа Long, тогда константы будут не Integer и их умножение не будет приводить к безобразию.
Номер ответа: 14
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #14
Добавлено: 22.02.07 12:54
HACKER, ты за 13 постофф успел появиться 5 раз. Теперь ясно, почему ты "лидер форума".
Номер ответа: 15
Автор ответа:
W[4Fh]LF
Вопросов: 0
Ответов: 187
Web-сайт:
Профиль | | #15
Добавлено: 22.02.07 12:59
 im x As Long
x = 2000 * 365 ' Error: Overflow
To work around this situation, type the number, like this:
 im x As Long
x = CLng(2000) * 365
Кхекхе... Я что-то не уловил смысла данной особенности?