Страница: 1 | 2 | 3 |
Вопрос: Проблема с типами данных
Добавлено: 10.03.07 11:40
Автор вопроса: Alias
Задача, ну проще некуда. нужно умножить 2 десятичных числа. Не могу понять ошибку в коде:
Dim a, b, y As Variant
a = TextBox1.Text
b = TextBox2.Text
y = a * b
Label1.Caption = y
(начинающий юзер)
Ответы
Всего ответов: 37
Номер ответа: 1
Автор ответа:
Боцман
ICQ: 295725312
Вопросов: 53
Ответов: 830
Web-сайт:
Профиль | | #1
Добавлено: 10.03.07 11:59
a = Text1.Text
b = Text2.Text
y = a * b
Label1.Caption = y
Все должно работать, если нет проверь у тебя случайно в числе не точка, в вычеслениях надо ставить запятую.
Номер ответа: 2
Автор ответа:
Patriot
ICQ: 439168318
Вопросов: 5
Ответов: 50
Профиль | | #2
Добавлено: 10.03.07 14:56
Этот пример работает принципи правельно, но, если ты знаешь заранее, какие типы данных будут передоваться в переменные, то желательно присвоить тип переменных поменьше, тип Variant - и работает медленно и памяти кушает много, притом, что первые две(а,в) переменные тоже имеют тип Variant, хоть ты это и неуказал как в третей, Visual Basic, автоматически выставляет тип Variant, если другой явно не указан.
Лучше указать так:
Dim a as Integer, b as Integer, y as Integer
Integer - предназначен для хранения целых чисел в диапазоне -32768 до +32767, т.е. размер памяти, выделяемой под такую переменную состовляет 2 байта. (256*256=65536). Символ для обозначения - "%".
Ты необежайся, но у меня к тебе вопрос:
Вот этот код, который приведён выше, в процедуру вставлен?
Напрмер:
Private Sub Form_Load()
Dim a, b, y As Variant
a = Text1.Text
b = Text2.Text
y = a * b
Label1.Caption = y
End Sub
, бывает и такое, что некоторые невставляют код в процедуру и хотят, чтобы он работал
Номер ответа: 3
Автор ответа:
Боцман
ICQ: 295725312
Вопросов: 53
Ответов: 830
Web-сайт:
Профиль | | #3
Добавлено: 10.03.07 16:10
Вопрос был о несоответствии с типами данных
Значит процедура уже есть,и он ее вызывает, но есть и ошибка которая скорее всего в написании
числа например 5.5 вместо 5,5 только тогда будет
выскакивать предупреждение о несоответствии с типами данных, 5*5 этой ошибки не вызывает.
А если до конца, то с (as Integer) ответ будет
5,5*5,5 = 25
вариант 1
Dim a As Double, b As Double, y As Double
a = Text1.Text
b = Text2.Text
y = a * b
Label1.Caption = y
End Sub
вариант 2
Dim a, b, y
a = Text1.Text
b = Text2.Text
y = CDbl * CDbl(b)
Label1.Caption = y
End Sub
но везде точка после целого числа не идет.
Номер ответа: 4
Автор ответа:
Боцман
ICQ: 295725312
Вопросов: 53
Ответов: 830
Web-сайт:
Профиль | | #4
Добавлено: 10.03.07 16:24
вариант 3
Dim a As Single, b As Single, y As Single
a = Text1.Text
b = Text2.Text
y = a * b
Label1.Caption = y
End Sub
Номер ответа: 5
Автор ответа:
Alias
Вопросов: 8
Ответов: 15
Профиль | | #5
Добавлено: 10.03.07 17:43
Спасибо всем.Действительно все дело в точке.
У меня к вам вопрос:почему вы пишите Text1.Text?
У меня этот фокус не проходит
Номер ответа: 6
Автор ответа:
Alias
Вопросов: 8
Ответов: 15
Профиль | | #6
Добавлено: 10.03.07 17:49
А как можно будет округлить полученный y до целого?
Номер ответа: 7
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #7
Добавлено: 10.03.07 19:49
Округление ф-ей Round
Номер ответа: 8
Автор ответа:
Patriot
ICQ: 439168318
Вопросов: 5
Ответов: 50
Профиль | | #8
Добавлено: 10.03.07 20:31
Округление:
Cint(занчение) - диапозон округления в интервале Integer
Clng(занчение) - диапозон округления в интервале Long
или Round
Значения - челое число.
Номер ответа: 9
Автор ответа:
Arseny
ICQ: 298826769
Вопросов: 53
Ответов: 1732
Профиль | | #9
Добавлено: 10.03.07 21:14
Так ты в чем пишешь? VB или VBA
Номер ответа: 10
Автор ответа:
-=Fenix=-
Вопросов: 33
Ответов: 81
Профиль | | #10
Добавлено: 10.03.07 22:05
У меня этот фокус не проходит
Добавь текстовое поле в форму и назови его Text1, тогда всё будет кататься в масле +)
Номер ответа: 11
Автор ответа:
Боцман
ICQ: 295725312
Вопросов: 53
Ответов: 830
Web-сайт:
Профиль | | #11
Добавлено: 10.03.07 23:05
Если называть то можно и так
On Error GoTo OSHIBKA
Label1 = Бабки.Text * КурсБаксов.Text
OSHIBKA:
If Err.Number = 13 Then ' Объект Err - содержит № ошибки
MsgBox "Это не есть число, возможно вы " & vbCrLf & "вставили точку вместо запятой, после целого числа", 48, ""
End If
End Sub
А еще лучше, запрети вставлять точку, пусть автоматом ставится запитая.
Номер ответа: 12
Автор ответа:
Alias
Вопросов: 8
Ответов: 15
Профиль | | #12
Добавлено: 11.03.07 18:33
Thank you Patriot!!!
Номер ответа: 13
Автор ответа:
Alias
Вопросов: 8
Ответов: 15
Профиль | | #13
Добавлено: 11.03.07 18:38
Если VBA - это тот, что встроен в OFFICE,то в нем
Номер ответа: 14
Автор ответа:
Patriot
ICQ: 439168318
Вопросов: 5
Ответов: 50
Профиль | | #14
Добавлено: 11.03.07 18:51
Alias, ты меня извини, но в OFFICE, программировать, это же ужас, найди себе нормальный VB 6.0 и всё будет путём
Номер ответа: 15
Автор ответа:
Alias
Вопросов: 8
Ответов: 15
Профиль | | #15
Добавлено: 11.03.07 19:03
Откуда вы узнали что я пишу программу для валют?
Впрочем, если я правильно понимаю ваш код, то он у меня не получаетсЯ
Dim a, b As Long
a =Бабки1.Text
b = КурсБаксов2.Text
On Error GoTo OSHIBKA
Label1 = CLng(a * b)
OSHIBKA:
If Err.Number = 13 Then ' Объект Err - содержит № ошибки
MsgBox "Это не есть число, возможно вы " & vbCrLf & "вставили точку вместо запятой, после целого числа", 48, ""
End If
End Sub