如何将英文小数转换为西班牙小数,在c#中使用全球化

时间:2011-02-07 07:26:55

标签: c# globalization

即时通讯使用visual studio 2008.我的桌面应用程序在不同的区域设置中运行。

在我的代码中,我在英文格式的字符串变量中有十进制数字,我想使用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次的转换语句。

我如何实现这一目标。请帮忙??

2 个答案:

答案 0 :(得分:2)

不是每次都创建新文化,最好使用CultureInfo.InvariantCulture - 我个人会使用decimal.Parsedecimal.TryParse而不是Convert.ToDecimal。只是我个人的偏好。 IIRC他们在处理无效输入方面只是真的不同。

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

public static decimal ParseDecimalInvariant(string text)
{
    return decimal.Parse(text, CultureInfo.InvariantCulture);
}

顺便说一句,我希望你确实在代码中没有字符串值。如果你有代表数字的字符串,只需将它们改为文字!

decimal myNum = 0.04m;

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

答案 1 :(得分:1)

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

通常情况下,您会将代码使用的必需文化放入某个静态字段中,并将该文化传递给解释 system 字符串的代码的每一部分文字。在您的情况下,由于代码文字是英文格式,您每次都可以传递CultureInfo.InvariantCulture并节省一些精力。

是的,这将是100个代码更改;坦率地说:坚强。