Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: hunger.ru
 Профиль | | #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()
    ;Dim 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:
    ;Dim x As Long
    x = 2000 * 365 ' Error: Overflow
To work around this situation, type the number, like this:

    ;Dim x As Long
    x = CLng(2000) * 365

Ответить

Номер ответа: 12
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #12 Добавлено: 21.02.07 23:58
БГ прямо знал, что ты когда подрастешь спросишь про ЭТО...

Ответить

Номер ответа: 13
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #13
Добавлено: 22.02.07 10:24
Указывай сзади числа суффикс типа Long, тогда константы будут не Integer и их умножение не будет приводить к безобразию.

Ответить

Номер ответа: 14
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #14 Добавлено: 22.02.07 12:54
HACKER, ты за 13 постофф успел появиться 5 раз. Теперь ясно, почему ты "лидер форума".

Потому что Билл Гейтс мудак! :)
Самый твой "умный" пост, очень познaвательный и общественно полезный.

Ответить

Номер ответа: 15
Автор ответа:
 W[4Fh]LF



Вопросов: 0
Ответов: 187
 Web-сайт: hunger.ru
 Профиль | | #15
Добавлено: 22.02.07 12:59
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:
    ;Dim x As Long
    x = 2000 * 365 ' Error: Overflow
To work around this situation, type the number, like this:

    ;Dim x As Long
    x = CLng(2000) * 365


Кхекхе... Я что-то не уловил смысла данной особенности?

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам