Страница: 1 |
Страница: 1 |
Вопрос: Long или Double
Добавлено: 09.03.07 10:53
Автор вопроса: KreAtoR
Скажите плиз отличия и чем лучше пользоваться и для чего что лучше подходит
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
Arseny
ICQ: 298826769
Вопросов: 53
Ответов: 1732
Профиль | | #1
Добавлено: 09.03.07 11:23
Long - длинное целое (от -2,147,483,648 до 2,147,483,647)
Double - с плавающей точкой (от -1.79769313486232E308 до -4.94065645841247E-324 и от (4.94065645841247E-324 до 1.79769313486232E308)
вроде так.
Номер ответа: 2
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #2
Добавлено: 09.03.07 11:43
тоесть Long оно без точки????
их же два Double и что еще тогда
Номер ответа: 3
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #3
Добавлено: 09.03.07 12:03
Long лучше использовать для счетчиков, индексов, и количества в неделимых штуках, т.е. там где по природе своей значение может быть только целым или дискретным. И особенно там, где любая цифра (в любом разряде) в значении может координально менять результат.
Double пригодно для всех случаев, когда природа значения может быть и дробным (действительным). Например, скорость, масса, количество в единицах измерения (в т.ч. и в штуках, если это имеет смысл), расстояние и т.д., где изменение в цифре наиболее нижних разрядах вляет только на точность значения, но не меняет координально результат решения.
Номер ответа: 4
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #4
Добавлено: 09.03.07 12:20
GenyaA пасиба
возникла такая проблема переменная типа Double переходит индекс при значении 33092,0757
Что можно сделать. Мне нужна плавающая точка
Номер ответа: 5
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #5
Добавлено: 09.03.07 12:44
Я не понял, что значит "переходит индекс"... Уточните, приведите часть кода, где и при каких обстоятельствах переменная "переходит индекс" и в каком именно случае и виде необходима плавающая точка. (Вариантов может быть несколько - от проблемы форматирования/округления до выбора вида представления числа.)
Номер ответа: 6
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #6
Добавлено: 09.03.07 14:34
переходит индекс, да фигню написал
это значит что дальше программа работать не может так как число больше допустимой нормы.
даю пример
Private Sub ClockFrame(index As Variant, ausgang_as_variable)
Dim durationSeconds As Variant
Dim hours As Integer
Dim minutes As Integer
Dim seconds As Integer
Dim frames As Integer
Dim rest As Double
durationSeconds = index
durationSeconds = Format(durationSeconds, "0.0000"
durationSeconds = durationSeconds / 1000
hours = Fix(durationSeconds / 3600)
durationSeconds = durationSeconds - hours * 3600
minutes = Fix(durationSeconds / 60)
durationSeconds = durationSeconds - minutes * 60
seconds = Fix(durationSeconds / 1)
durationSeconds = durationSeconds - seconds * 1
frames = Fix(durationSeconds / 0.04)
rest = (durationSeconds - frames * 0.04)
ausgang_as_variable = Format(hours, "00" & ":" & Format(minutes, "00" & ":" & Format(seconds, "00" & " F " & Format(frames, "00" & " R " & Format(rest, "0.0000000"
End Sub
в данном случае ине пришлось переменную
durationseconds изменить вот так!!!!
durationSeconds = Format(durationSeconds, "0.0000"
durationSeconds = durationSeconds / 1000
пока что на данный момент она имеет значение 6088.0000000
тестирую при каком значении станет большим слишком числом.
в минутах это 1 час 42 минуты и 50 сек примерно.
в итоге надо на 20-30 часов чтоб хватило!!!!!!
вот такая вот проблема
Номер ответа: 7
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #7
Добавлено: 09.03.07 15:52
Я не уверен, что правильно понял суть выполняемой операции процедуры... но думаю, основная Ваша ошибка именно в неверном представлении типов данных. Попробуйте протестируйте Вашу задачу с таким кодом:
Dim durationSeconds As Double
Dim hours As Integer
Dim minutes As Integer
Dim seconds As Integer
Dim frames As Double
Dim rest As Double
durationSeconds = index
' durationSeconds = Format(durationSeconds, "0.0000"
durationSeconds = durationSeconds / 1000#
hours = Fix(durationSeconds / 3600#)
durationSeconds = durationSeconds - hours * 3600#
minutes = Fix(durationSeconds / 60#)
durationSeconds = durationSeconds - minutes * 60#
seconds = Fix(durationSeconds / 1#)
durationSeconds = durationSeconds - seconds * 1#
frames = Fix(durationSeconds / 0.04)
rest = (durationSeconds - frames * 0.04)
ausgang_as_variable = Format(hours, "00" & ":" & Format(minutes, "00" & ":" & Format(seconds, "00" & " F " & Format(frames, "#0" & " R " & Format(rest , "0.0000000000"
End Sub
Я тестировал эту процедуру со значением, равным
(23 часа 59 минут 59 секунд + 0.999123456789)*1000 - на мой взгляд - работает.
Номер ответа: 8
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #8
Добавлено: 09.03.07 16:39
Сенкс попробуем