使用VT_BSTR和德语区域设置中嵌入小数点时的转换不正确

时间:2012-10-04 09:43:51

标签: c++ excel locale decimal-point

我有一段代码(c ++)正在写一些像这样的浮点值:

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

您可以看到这些浮点值以字符串的形式存储,小数点的格式不同,例如: “110.000000”,“20.11”等(此示例适用于英语区域设置)

现在,当使用英语语言环境时,它可以正常运行。但是,当我在控制面板中切换到德语区域设置时,小数点将更改为“,”(这很好),但在将这些本地化字符串传递给Excel后,它们未正确转换。例如,在写“110,000000”的情况下,我获得了1亿英镑。其他值如“20,11”保留为文本。

解决此问题的唯一方法是用“。”覆盖小数点。在写入Excel之前的程序中。在使用VT_BSTR时,为什么转换不能识别区域设置?

我还应该补充一点,我尝试将程序中的语言环境从默认语言切换为德语 - 仍然没有运气。

提前谢谢

1 个答案:

答案 0 :(得分:1)

让Excel猜测值类型绝不是一个好主意。 使用VT_BSTR时,货币值应为变体类型VT_CY。使用值分配cyVal成员。它是一个8字节的整数值(类型为LONGLONG的int64成员),货币金额乘以10,000。一万:)