字符串值中包含E等科学计数法,比如:[1.21205e+07,3.58505e+06,-5e-05]转化为对应的数字。
方法一:
private Decimal ChangeDataToD(string strData)
{
Decimal dData = 0.0M;
if (strData.Contains("E")||strData.Contains("e"))
{
dData = Convert.ToDecimal(Decimal.Parse(strData.ToString(), System.Globalization.NumberStyles.Float));
}
return dData;
}
使用该方法大多数可以正常转换,但是在实际项目中会出现错误提示:值对于小数而言太大或太小
。可能是数据溢出了。
方法二:
在方法一的基础上做了改进。
private double ChangeDataToD(string strData)
{
if (strData.Contains("E")||strData.Contains("e"))
{
Double.TryParse(strData.ToString(), out double newData);
return newData;
}
else
{
return 0.0M;
}
}
以上方法在实际使用中验证是OK的。如果项目中是按上述方法应用的,本文后面就可以不用看了。
实际上,我在项目中应用返回的是string而不是double,因此遇到了另一个问题:
private string ChangeDataToD(string strData)
{
if (!string.IsNullOrWhiteSpace(strData) && (strData.Contains("E") || strData.Contains("e")))
{
double.TryParse(strData, out double newData);
return newData.ToString();
}
else
{
return strData;
}
}
以上代码在实际应用了很长时间以后,发生了一次转换失败的情况,原因是需要转换的数值特别小,转为string的过程中出现了问题,后通过指定转换位数修复了问题。
private string ChangeDataToD(string strData)
{
if (!string.IsNullOrWhiteSpace(strData) && (strData.Contains("E") || strData.Contains("e")))
{
double.TryParse(strData, out double newData);
return newData.ToString("F6");
}
else
{
return strData;
}
}