即时通讯使用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次的转换语句。
我如何实现这一目标。请帮忙??
答案 0 :(得分:2)
不是每次都创建新文化,最好使用CultureInfo.InvariantCulture
- 我个人会使用decimal.Parse
或decimal.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个代码更改;坦率地说:坚强。