C# 如何在c中使用全球化将英语十进制转换为西班牙语十进制#

C# 如何在c中使用全球化将英语十进制转换为西班牙语十进制#,c#,globalization,C#,Globalization,我正在使用VisualStudio2008。我的桌面应用程序在不同的区域设置下运行 在我的代码中,我有英文格式的字符串变量中的十进制数,我想使用convert.ToDecimal()将它们转换为十进制变量,区域设置为“西班牙语(厄瓜多尔)” 当我执行以下操作时: string myNum = "0.04"; decimal myDec = Convert.ToDecimal(myNum); // here im getting 4 instead of 0,04 当我使用 Convert.

我正在使用VisualStudio2008。我的桌面应用程序在不同的区域设置下运行

在我的代码中,我有英文格式的字符串变量中的十进制数,我想使用
convert.ToDecimal()
将它们转换为十进制变量,区域设置为“西班牙语(厄瓜多尔)”

当我执行以下操作时:

string myNum = "0.04";  
decimal myDec = Convert.ToDecimal(myNum); // here im getting 4 instead of 0,04
当我使用

Convert.ToDecimal(myNum, new CultureInfo("en-US")); // i got 0.04, but i want 0,04
我不能为每个语句添加新的
CultureInfo(“en-Us”)
,因为我已经使用了100多次转换语句


我如何做到这一点。请帮助???

与其每次都创建一个新的区域性,不如使用
CultureInfo.InvariantCulture
——我个人会使用
decimal.Parse
decimal.TryParse
,而不是
Convert.ToDecimal
。不过这只是我个人的喜好。IIRC它们只是真实的y在处理空输入方面有所不同

但是,如果您只是反对每次都在代码中包含它,最简单的解决方案是编写自己的helper方法并调用它。例如:

public static decimal ParseDecimalInvariant(string text)
{
    return decimal.Parse(text, CultureInfo.InvariantCulture);
}
另一方面,我希望您的代码中没有真正的字符串值。如果您有表示数字的字符串,只需将它们改为文字

decimal myNum = 0.04m;

这比在执行时解析要好得多:)

我相信这里的正确答案将涉及代码更改。您可以更改应用程序的区域性,但这是不正确的,因为它会覆盖用户的显示首选项等

通常,您会将代码使用的所需区域性放到某个静态字段中,并将该区域性传递给解释系统字符串文字的代码的每一位。在您的情况下,由于代码文字是英文格式的,因此每次都可以传递
CultureInfo.InvariantCulture
,从而节省一些工作


是的,将有100个代码更改;坦白说:很难。

我遵循了你的代码。它工作得很好,但在某些情况下,区域设置为“西班牙语(厄瓜多尔)”,当我通过decimal.Parse(“10,50”,CultureInfo.InvariantCulture)时,我得到1050。为什么会这样?