Неправильное преобразование при использовании десятичной точки в VT_BSTR и немецкой локали

У меня есть кусок кода (c ++), который пишет некоторые значения с плавающей точкой, чтобы преуспеть, как это:

...
values[ position ].bstrVal = formattedValue;
values[ position ].vt = VT_BSTR;
...

как вы можете видеть, эти значения с плавающей запятой хранятся в виде строки, а десятичная точка форматируется по-разному, например:
«110.000000», «20.11» и т. Д. (Этот пример для английского языка)

Теперь он отлично работает, когда используется английская локаль. Однако, когда я переключаюсь на немецкий язык на панели управления, десятичная точка изменяется на «,» (и это нормально), но после передачи этих локализованных строк в Excel они не конвертируются правильно. Например, в случае написания «110,000000» я получаю 100 миллионов в Excel. Другие значения, такие как «20,11», остаются в виде текста.

Единственный способ исправить это — переписать десятичную точку с помощью «.» в моей программе, прежде чем писать в Excel. Любые идеи, почему преобразование не учитывает локали при использовании VT_BSTR?

Я также должен добавить, что я пытался переключить язык в моей программе с языка по умолчанию на немецкий — но все равно не повезло.

заранее спасибо

0

Решение

Никогда не стоит позволять Excel угадывать тип значения. Делать не используйте VT_BSTR, значение валюты должно иметь тип варианта VT_CY. Назначьте члену cyVal значение. Это 8-байтовое целочисленное значение (член типа int64 типа LONGLONG), сумма в валюте, умноженная на 10 000. Десять тысяч 🙂

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector