经度是分和秒是按60进位,如果要做运算第一步就是转换成浮点数,之后就是计算和还原。
输出:
- usingSystem.Text.RegularExpressions;
- publicstaticdoubleDegreeFromString(stringstr)
- {
- Matchmatch=Regex.Match(str,
- @"(?<hour>[0-9]+)°(?<minute>[0-9]+)(′|')(?<second>[0-9]+(/.[0-9]+)?)(″|""|'')");
- if(match.Success)
- {
- doublehour=0,minute=0,second=0;
- double.TryParse(match.Result("${hour}"),outhour);
- double.TryParse(match.Result("${minute}"),outminute);
- double.TryParse(match.Result("${second}"),outsecond);
- returnhour+minute/60+second/3600;
- }
- elsereturn0;
- }
- publicstaticstringDegreeToString(doubledegree)
- {
- doubleminute=(degree-(int)degree)*60;
- doublesecond=(minute-(int)minute)*60;
- returnstring.Format("{0:#}°{1:#}′{2:#.00}″",degree,Math.Abs(minute),Math.Abs(second));
- }
- privatevoidbutton1_Click(objectsender,EventArgse)
- {
- Console.WriteLine(DegreeToString(DegreeFromString("20°53'41''")));
- Console.WriteLine(DegreeToString(DegreeFromString("10°11'20.5''")));
- Console.WriteLine(DegreeToString(DegreeFromString("20°53'41''")-DegreeFromString("10°11'20.5''")));
- Console.WriteLine(DegreeToString(DegreeFromString("10°11'20.5''")-DegreeFromString("20°53'41''")));
- }
- 21°54′41.00″
- 10°11′20.50″
- 11°42′20.50″
- -11°42′20.50″