Тема: Выделение целой и дробной части типа Double

Всем здравствуйте!
Если кто-нибудь знает, подскажите, пожалуйста, есть ли в VBA такая функция и если нет, то чем её можно заменить? Нужно вот для чего: есть очень большое число типа Double, которое надо разделить нацело на другое число. Оператор "\" не срабатывает, потому что не может привести большое число к типу Long или Integer, ибо тот переполняется.  Буду очень рада лююбым полезным советам. Спасибо.

Re: Выделение целой и дробной части типа Double

Осенило! :)  Версия выделения целой части для положительного числа:

Function IntPart(x As Double) As Double
    Dim s As String
    Dim pos As Integer
    s = CStr(x)
    pos = 0
    pos = InStr(1, s, ".")
    If pos = 0 Then
        pos = InStr(1, s, ",")
    End If
    IntPart = CDbl(Mid(s, 1, pos - 1))
End Function

И всё-таки интересно, неужели нет стандартной функции?... Неужели никому, кроме меня, не надо было?...

Re: Выделение целой и дробной части типа Double

> masha
первое, что приходит в голову - перевести его в String, сделать Split по точке (или запятой, не помню что там), и с 2-мя получившимися значениями делать что хочешь...

Re: Выделение целой и дробной части типа Double

число неможет быть integer или long поэтому либо использовать double либо string
dim j as double
dim str as string
j=1.2546545649038E+18
j=j/901238
str=str(j)
................................

Re: Выделение целой и дробной части типа Double

Ну да, я сделала через String... Но как-то это через ж... немножко. :)
Кстати, если j=1.2546545649038E+18, то в какую строку оно должно преобразовываться: "1.2546545649038E+18" или
"1254654564903800000" ?  Тогда надо ещё дополнительно рассматривать нулевую дробную часть... У меня вообще-то всё проще, дробная часть будет по-любому, поэто можно не отслеживать, но мне хотелось, чтобы оно работало всегда, а не только в текущей задачке. :)

Re: Выделение целой и дробной части типа Double

из хелпа...
Dim MyNumber
MyNumber = Int(99.8)    ' Returns 99.
MyNumber = Fix(99.2)    ' Returns 99.
MyNumber = Int(-99.8)    ' Returns -100.
MyNumber = Fix(-99.8)    ' Returns -99.
MyNumber = Int(-99.2)    ' Returns -100.
MyNumber = Fix(-99.2)    ' Returns -99.
это разве не то?

Re: Выделение целой и дробной части типа Double

? Fix(1.2546545649038E+18)
1,2546545649038E+18

Re: Выделение целой и дробной части типа Double

а это не дебугер просто так показывает сокращая???
если взять
? Fix(1.2546545649038E+12)
будет
1254654564903
в любом случае можно использовать Round(j,0)

Re: Выделение целой и дробной части типа Double

правда результат разный
? round(1.2546545649038E+12)
уже
1254654564904
=)

Re: Выделение целой и дробной части типа Double

> Артём
Оно, противное :)

Re: Выделение целой и дробной части типа Double

ну если округленное число тогда
j=round(j)
а если нужен обрубок тогда
j=fix(j)

Re: Выделение целой и дробной части типа Double

Я пыталась сначала пореобразовывать с помощью CInt(), и видимо, в этом была моя роковая ошибка.
В Хелпе меня смутила фраза "return the resulting integer value". Как оно его может вернуть, если оно в целый тип не помещается?   Однако пробразование с Int() действительно, работает. :) Вроде бы пока работает... Спасибо всем большое!