Double.ToString(“C”)返回不正确的货币符号

时间:2011-09-08 20:09:06

标签: .net vb.net currency

我有以下代码,

        txtCaseworkCost.Text = _CaseworkCost.ToString("C")

由于某种原因,文本框中的输出如下所示,

enter image description here

用一些奇怪的符号代替美元符号。计算机的本地是美国所以它应该显示$符号。

该控件正在AutoCAD插件中使用,其中AutoCAD加载.Net dll。奇怪的是,如果我在Windows窗体应用程序中使用相同的控件,它可以正确使用正确的符号。只有在从其他应用程序加载代码时才会出现错误的符号。

这有什么解决方法吗?我无法控制AutoCAD如何加载dll,所以我需要以某种方式纠正我的代码中的货币符号。此外,此错误也出现在我们使用的报告工具中,因此我正在寻找除手动插入符号之外的解决方案。

3 个答案:

答案 0 :(得分:3)

您需要覆盖当前文化。

Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture("en-US")
txtCaseworkCost.Text = _CaseworkCost.ToString("C", culture)

答案 1 :(得分:2)

您无法在插件方案中控制Thread.CurrentCulture。该线程由AutoCAD初始化和配置,可能已为其自身目的更改了其默认语言。 winapi中的SetThreadLocale()。

因此,如果您需要美元,请确保使用接受IFormatProvider参数的覆盖并传递您想要的Culture.NumberFormatInfo。

答案 2 :(得分:1)

在您的加载项中设置当前文化,无论您喜欢哪个符号都可以显示,然后就可以完成任务了。