Есть activex компонент, который, по всей видимости, был написан на Delphi.
Я его пытаюсь использовать в Qt (C++). Проблема в типе Currency (денежный).
После dumpcpp тип Currency становится qlonglong, из-за чего теряется дробная часть. Изменил на double, но приложение изредка, но ругается на значение (какое оно к нему приходит, увы, узнать не получится).
Возможно ошибка при округлении, либо что-то не так передаётся. К сожалению, невъехал, как в итоге приводятся типы и передаются.
Подскажите, какая будет наиболее грамотная замена, что бы и дробная часть не отбрасывалась и передавалось правильно?
Тут хитрость в том, что тип float (в широком смысле) указывает на дробное число с плавающей точкой. Речь же идёт о дробном с фиксированной точкой (fix-point). Здесь не получится брать формат с мантиссой и порядком, т.к. внутреннее представление двоичное, а не десятичное (4 разряда). Поэтому надо брать целое число, но где-то обрабатывать (при выводе результатов) делением на 10^4.
В автоматике часто дробные числа передаются в виде целых, предварительно умноженных на 10 или 100.
Qt все правильно переводит. Тип Currency является типом 64 битным fixed point и на уровне процессора обрабатывается как целое.
Вам нужно использовать любую библиотекку для работы с fixed point типом, например https://stackoverflow.com/questions/79677/whats-th...