Страница 1 из 1
REAL -> CURRENCY
Добавлено: 26 Май 2010, 16:32
Admin
Есть C++ тип данных CURRENCY
Нужно в него засунуть DECIMAL или REAL
Как сделать?
И что такое CURRENCY, типа
??
Спасибо.
Re: REAL -> CURRENCY
Добавлено: 26 Май 2010, 17:19
Andrew Listiev
Имхо, это large long
Re: REAL -> CURRENCY
Добавлено: 26 Май 2010, 19:18
Дед Пахом
Не знаю, к C++ подойдёт ли? поищи 'typedef' для CURRENCY.
Код: Выделить всё
!MSDN:
!The COM CY and Visual Basic Currency type is a signed 64-bit integer in units of 1/10,000 (or 1/100 of a cent).
!The currency type can accurately represent dollars and cents values, so it's good for financial calculations.
!The range of the currency type is more than +/- 900 trillion, so it'll even cover calculations of the national debt, at least for the foreseeable future.
!CURRENCY EQUATE(REAL)
!CY EQUATE(CURRENCY)
или так:
Код: Выделить всё
!CY GROUP,TYPE
!Lo ULONG
!Hi LONG
! END
!CURRENCY EQUATE(CY)
Re: REAL -> CURRENCY
Добавлено: 27 Май 2010, 6:13
Admin
Подходит в принципе даже LONG LONG но вопрос сейчас встал - как засунуть в эти два лонга число REAL
Т.е. как с BSHIFT и т.д. разобраться с учетом что эти операции работают только с числом типа LONG
LONGLow = BAND(REAL,0FFFFFFFFh)
LONGHigh = BSHIFT(REAL,-32)
Я в ступоре...
Re: REAL -> CURRENCY
Добавлено: 27 Май 2010, 11:56
Дед Пахом
Вот нашёл у себя такой кусок:
Код: Выделить всё
cyVal.Lo=INT(pValue)*10000 + (pValue-INT(pValue))*10000
правда, есть ремарка: i know how to process only small positive currency values
Re: REAL -> CURRENCY
Добавлено: 31 Май 2010, 7:41
Admin
По итогу, сделали вот таким образом. Может тупо но работает.
Код: Выделить всё
Currency GROUP,TYPE
Low ULONG
High ULONG
END
Real2Currency PROCEDURE(REAL Price, *Currency Result)
Cnt LONG
CODE
CLEAR(Result.Low)
CLEAR(Result.High)
LOOP Cnt = 64 TO 0 BY -1
IF Price >= 2^Cnt
IF Cnt >= 32
Result.High += 2^(Cnt-32)
ELSE
Result.Low += 2^Cnt
END
Price -= 2^Cnt
END
END
Еще по ходу работы нарвались на такой финт Кларионовских неявных преобразований типов.
Выполнить и задуматься...
А код
прекрасно работает.
Можно влететь. Хотя вроде раньше как то проносило.
Re: REAL -> CURRENCY
Добавлено: 31 Май 2010, 9:09
Дед Пахом
Для отрицательных значений работать не будет (дефицит бюджета получить не удасться).
Re: REAL -> CURRENCY
Добавлено: 31 Май 2010, 9:37
Admin
В нашем случае только положительные нужны. Так что делалось под конкретую задачу.
Переделать думаю не трудно. Мне пока не нужно.
Спасибо