我目前有以下两种方法:
public static Point[] PolygonFromFile(string file)
{
string[] GBfile = File.ReadAllLines(file);
// remove unnecessary data from first 2 lines, never contains any polygon data
GBfile[0] = string.Empty;
GBfile[1] = string.Empty;
const string delim = " ";
List<string> points = (from s in GBfile where !string.IsNullOrEmpty(s) from i in s.Split(delim.ToCharArray()) where !string.IsNullOrEmpty(i) && i != "END" select i).ToList();
List<Point> polygon = new List<Point>();
for (int i = 0; i < points.Count / 2; i++)
{
polygon.Add(new Point
{
X = PointParse(points[i]),
Y = PointParse(points[i + 1])
});
}
return polygon.ToArray();
}
private static double PointParse(string value)
{
string[] parsed = value.Split("E".ToCharArray());
char function = '\0';
bool met = false;
foreach (char c in parsed[1])
{
if (c == '-' || c == '+')
{
function = c;
break;
}
}
var splitMultiplier = parsed[1].Split(function);
double decimalPlaces = Convert.ToDouble(splitMultiplier[1]);
if (decimalPlaces == 0) return Convert.ToDouble(parsed[0]);
switch (function)
{
case '+':
return Convert.ToDouble(parsed[0]) * Math.Pow(10, decimalPlaces);
case '-':
return Convert.ToDouble(parsed[0]) / Math.Pow(10, decimalPlaces);
}
return 0;
}
这会将5.807600E-02
之类的值转换为0.058076
的真值。
我觉得这是一种非常冗长的方式来实现我所需要的,C#中是否有一个函数可以实现这一目标,还是需要通过上述过程将给定值转换为必要的值?
答案 0 :(得分:2)
.NET可以自己解析这些值
Double.Parse("5.807600E-02");
将返回值0.058076作为double。
答案 1 :(得分:0)
这个怎么样?
double d = Double.Parse("1.2345E-03", System.Globalization.NumberStyles.Float);
答案 2 :(得分:0)
您可以使用解析功能。试试这个。
decimal d = Decimal.Parse("5.807600E-02",System.Globalization.NumberStyles.Float);