在使用C#开发软件并需要应用到国外市场的时候,对于欧洲国家的用户来说可能会碰到小数点(,)识别不了的问题,那么接下来就介绍一种方法来让软件自动识别用户输入的数字格式。
整体思想就是:当用户在TextBox中输入的字符串参与计算之后,软件底层会先进行一次double.TryParse的转换,如果转换不成功的话,那么只有两种可能:1.输入的不是数字,例如:“”;2.输入的是识别不了的时区格式,例如,当前的CultureInfo.CurrentCulture为{zh-CN},但是你输入的是"123,4",那么软件就不会识别出来你输入的小数;
解决办法是:
1.以{zh-CN}为基准,当double.TryParse的结果为false时,先判断当前的时区格式是不是{zh-CN}如果是的话,那么就再转一下{de-DE}格式,如果还是false,那么就是你输入的数字格式有问题,有可能是个“”;
2.当判断不是{zh-CN}时,就再判断是否是{de-DE}格式的,如果是的话,就按照{zh-CN}的格式进行转换一下,此时如果返回值为false,则说明你输入的数字格式有问题,可能是个“”。
具体实现代码如下:
private double Str2Double(string strText)
{
bool bRet=true;
double dValue=0;
//第一次检测
bRet=double.TryParse(strText,System.Globalization.NumberStyles.Float,CultureInfo.CurrentCulture,out dValue);
if(bRet)//说明转换成功,当前输入的数据符合当前的时区格式
{
return dValue;
}
else//没有转成功,可能为“”,也可能是时区格式不对
{
string[] ClutureSources={"en-us","zh-cn","ar-iq","de-de"};
CultureInfo culture=CultureInfo.GetCultureInfo(CultureSources[1]);
if(CultureInfo.CurrentCulture.Name==cluture.ToString())//当前为中国时区,且转换成中国时区失败,尝试转换成欧洲时区;
{
culture=CultureInfo.GetCulture(CultureSources[3]);
bRet=double.TryParse(strText,System.Globalization.NumberStyles.Float,culture,out dValue);
}
else//当前为其他时区,且转换成其他时区失败,尝试转换成中国时区;
{
culture=CultureInfo.GetCulture(CultureSources[1]);
bRet=double.TryParse(strText,System.Globalization.NumberStyles.Float,culture,out dValue);
}
return dValue;
}
}