Это не имеет ничего общего с VariantCopyInd, а лишь тот факт, что литерал в том виде, в котором он существует в коде, не имеет точного представления в формате с плавающей запятой, используемом внутри COM-вариантами.
Следовательно, нет способа достичь того, что вы хотите, кроме как использовать вариант типа ВАЛЮТА.Он будет иметь ограниченную точность, см. MSDN:
Типы CURRENCY используют внутреннее десятичное представление, так же как и литерал кода. Вам все равно придется обеспечить косвенную инициализацию (из string , а не с плавающей запятой / двойной литерал) в коде, чтобы предотвратить любые нежелательные эффекты представления.
Номер валюты, хранящийся в виде 8-байтового целого числа с двумя дополнениями, масштабированного на 10 000, чтобы получить число с фиксированной точкой с 15 цифрамислева от десятичной точки и 4 цифры справа.Этот IDispatch::GetTypeInforesentation
обеспечивает диапазон от 922337203685477.5807 до -922337203685477.5808 .
Тип данных CURRENCY
полезен для вычислений с использованием денег или для любых вычислений с фиксированной точкой, где точность особенно важна.