C# 如何使用Double.TryParse方法(String、NumberStyles、IFormatProvider、Double)
我试图解析一个值为“-51.739253997802734”的经度 状况C# 如何使用Double.TryParse方法(String、NumberStyles、IFormatProvider、Double),c#,.net,C#,.net,我试图解析一个值为“-51.739253997802734”的经度 状况 double.TryParse(latLng.Last(), style, numberFormatInfo, out longitude) 始终返回false,并且未设置经度。这只发生在前缀为“-”的字符串上,我通常使用以下命令: double d; double.TryParse("-3.1415", NumberStyles.Any, NumberFormatInfo.InvariantInfo, out d);
double.TryParse(latLng.Last(), style, numberFormatInfo, out longitude)
始终返回false,并且未设置经度。这只发生在前缀为“-”的字符串上,我通常使用以下命令:
double d;
double.TryParse("-3.1415", NumberStyles.Any, NumberFormatInfo.InvariantInfo, out d);
它忽略所有区域设置,并使用大多数情况下使用的格式。您专门将NumberNegativeSign设置为“\u2212”。这可能是官方的Unicode减号,但不是编程语言或数据通信中通常使用的减号 当我使用纯“-”(u002D,连字符减号)时,您的示例将进行解析。您的分析失败,因为输入中的负号不是您指定的
var numberFormatInfo = new NumberFormatInfo { NumberDecimalSeparator = ".", NegativeSign = "\u002d", NumberNegativePattern = 1 };
工作
看
您可能需要使用真正的减号Unicode代码点
\u2212。在编程(\u002d)中使用的减号是
“连字符减号”,其排序顺序是上下文相关的,因为它是
也经常用作连字符。有比你想要的更多的东西
了解许多不同类型的破折号
这解决了我的问题
private new const NumberStyles Style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign;
显然是数字风格。数字把事情搞砸了
编辑:
我发现我可以让它变得更简单
private new const NumberStyles Style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign;
var value = GetValue();
var unknownGeoCoordinate = GeoCoordinate.Unknown;
if (string.IsNullOrWhiteSpace(value))
return unknownGeoCoordinate;
// The value of location in the Sitecore field is a pipe-separated string
// the first value is the latitude followed by pipe "|", then longitude
// Example: 67.2890989|14.401694
var latLng = value.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
if (latLng.Count() != 2)
return unknownGeoCoordinate;
double latitude;
double longitude;
if (!double.TryParse(latLng.First(), Style, null, out latitude) || !double.TryParse(latLng.Last(), Style, null, out longitude))
return unknownGeoCoordinate;
它可能也会与
private new const NumberStyles Style = NumberStyles.Any;
谢谢你的回答
最好的,
比拉尔你确定那个数字标志吗?它不应该是一个普通的
'-'
?什么是latLng.First()
?NegativeSign=“\u2212”肯定是一个错误的猜测。删除该选项,然后再试一次。可能回答了问题,但如果您想了解发布的示例失败的原因,您会很感兴趣。@StevenJeuris您是对的。问题是如何使用该方法,而不是如何解决;-)。不过,这可能还是有帮助的。
private new const NumberStyles Style = NumberStyles.Any;