Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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-сайт: www.genyaa.nm.ru
 Профиль | | #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-сайт: www.genyaa.nm.ru
 Профиль | | #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-сайт: www.genyaa.nm.ru
 Профиль | | #7
Добавлено: 09.03.07 15:52
Я не уверен, что правильно понял суть выполняемой операции процедуры... но думаю, основная Ваша ошибка именно в неверном представлении типов данных. Попробуйте протестируйте Вашу задачу с таким кодом:
Private Sub ClockFrame(index As Variant, ausgang_as_variable)
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
Сенкс попробуем :)

Ответить

Страница: 1 |

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



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