REAL -> CURRENCY

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

REAL -> CURRENCY

Сообщение Admin »

Есть C++ тип данных CURRENCY
Нужно в него засунуть DECIMAL или REAL
Как сделать?
И что такое CURRENCY, типа

Код: Выделить всё

CURRENCY  GROUP 
Low         LONG
Hi          LONG
          END
??
Спасибо.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Andrew Listiev
Активист
Сообщения: 166
Зарегистрирован: 07 Июль 2005, 11:16
Откуда: Латвия, Рига

Re: REAL -> CURRENCY

Сообщение Andrew Listiev »

Имхо, это large long
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: REAL -> CURRENCY

Сообщение Дед Пахом »

Не знаю, к 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)
С уважением, ДП
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: REAL -> CURRENCY

Сообщение Admin »

Подходит в принципе даже LONG LONG но вопрос сейчас встал - как засунуть в эти два лонга число REAL
Т.е. как с BSHIFT и т.д. разобраться с учетом что эти операции работают только с числом типа LONG
LONGLow = BAND(REAL,0FFFFFFFFh)
LONGHigh = BSHIFT(REAL,-32)

Я в ступоре...
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: REAL -> CURRENCY

Сообщение Дед Пахом »

Вот нашёл у себя такой кусок:

Код: Выделить всё

  cyVal.Lo=INT(pValue)*10000 + (pValue-INT(pValue))*10000
правда, есть ремарка: i know how to process only small positive currency values
С уважением, ДП
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: REAL -> CURRENCY

Сообщение 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
Еще по ходу работы нарвались на такой финт Кларионовских неявных преобразований типов.
Выполнить и задуматься...

Код: Выделить всё

MESSAGE(1000000*10000)
А код

Код: Выделить всё

MESSAGE(1000000*10^4)
прекрасно работает.

Можно влететь. Хотя вроде раньше как то проносило.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: REAL -> CURRENCY

Сообщение Дед Пахом »

Для отрицательных значений работать не будет (дефицит бюджета получить не удасться).
С уважением, ДП
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: REAL -> CURRENCY

Сообщение Admin »

В нашем случае только положительные нужны. Так что делалось под конкретую задачу.
Переделать думаю не трудно. Мне пока не нужно.
Спасибо
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Ответить