事实上,我有多个可以生成数字数据的系统,它们以文本文件的形式存储在某个 Web 服务器上。有些系统使用小数点作为分数分隔符,有些系统同样使用小数点逗号。
应用程序(胖客户端,.net 2.0)也可以在任何一种系统上运行。
因此,经过一番磕磕绊绊,我做到了:(http://pastebin.com/vhLXABDD)
public static bool HasDecimalComma;
public static bool HasDecimalPeriod;
public static double GetNumber(string NumberString)
{
if (!HasDecimalComma && !HasDecimalPeriod)
{
string s = string.Format("{0:0.0}", 123.123);
if (s.Contains('.'))
{
HasDecimalPeriod = true;
}
else if (s.Contains(','))
{
HasDecimalComma = true;
}
else
{
throw new SystemException(string.Format("strange number format '{0}'", s));
}
}
if (HasDecimalComma)
{
return double.Parse(NumberString.Replace('.', ','));
}
if (HasDecimalPeriod)
{
return double.Parse(NumberString.Replace(',', '.'));
}
throw new ArgumentException(string.Format("can't parse '{0}'", NumberString));
}
你会建议更好,更优雅的方式吗?
编辑:
我很抱歉之前没有提到它,并且由于您的答案倾向于那个方向 - 我无法用数字存储生成文化,我只能尝试“检测”它。