C#科学计数法转化为正常数值

字符串值中包含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;
	}
}

参考链接:C#科学计数法转化为正常数值_c# 科学计数法 转正常-CSDN博客

—— 完 ——
相关推荐
评论

立 为 非 似

中 谁 昨 此

宵 风 夜 星

。 露 , 辰

文章点击榜

细 无 轻 自

如 边 似 在

愁 丝 梦 飞

。 雨 , 花