Что Вы используете для представления фиксированной точки в C++?

Интерфейсы должны быть доступны только по указателям / ссылкам. В этом случае вам нужна переменная-указатель, и вы должны передать адрес этой переменной в SHCreateShellItemArrayFromDataObject() (используя приведение типа), чтобы он мог установить этот указатель на адрес объекта, реализующего IShellItemArray, для которого Shell создает вы. Например:

HRESULT MyContextMenuHandler::Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject* pdtObj, HKEY hkeyProgId)
{
    ...
    IShellItemArray *items; // <-- pointer
    HRESULT hr = SHCreateShellItemArrayFromDataObject(pdtObj, IID_IShellItemArray, (void**)&items); // <-- type cast
    ... 
}
20
задан Edwin Jarvis 28 September 2008 в 16:36
поделиться

4 ответа

У доктора Dobb есть статья о возможной реализации типа вычислений с фиксированной точкой в C++. Проверьте это .

6
ответ дан 30 November 2019 в 01:23
поделиться
0
ответ дан 30 November 2019 в 01:23
поделиться

Я использую свой математический класс фиксированной точки. Это разработано, чтобы быть более или менее понижением замены для, плавает/удваивает. http://codef00.com/coding

РЕДАКТИРОВАНИЕ : Как примечание стороны, я не был бы, лично использовал класс фиксированной точки с этой целью. Я вместо этого просто сохранил бы количество центов (или десятых частей цента или сотых частей цента по мере необходимости). Справедливое делает математику непосредственно с этим. Затем я масштабировал бы значение соответственно при отображении пользователям.

6
ответ дан 30 November 2019 в 01:23
поделиться

Ай. Финансовые системы хитры, Вашей основной проблемой не является математика фиксированной точки, проблема погрешности округления.

у Вас может быть хорошая электронная таблица, полная maverlous вычислений со скидками клиентским типом и включенным VAT. Вы делаете общее количество, Вы представляете его бухгалтеру, и он говорит, что значения неправильны. Причина: вывод может быть форматирован только с 2 десятичными разрядами, но внутренне значение имеет все десятичные разряды плавания или дважды. и они действительно складывают.

необходимо знать финансовые документы и решить, где основные значения будут. Значение, какие значения - те бухгалтеры, проверит (да, оно требует знаний о бизнесе, следовательно 'хитрая' часть).

перед сохранением значения к персистентной форме (база данных, файл, память...) Вы усекаете дополнительные десятичные разряды, которые, возможно, добавили умножение и подразделения.

Быстрое и грязное решение для десятичных разрядов N: ((дважды) ((интервал) (Значение * N * 10.0)))/10.0

, Конечно, необходимо проверить точно, какой вид округления делают финансовые документы требуют.

6
ответ дан 30 November 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: