C# 如何使用Double.TryParse方法(String、NumberStyles、IFormatProvider、Double)

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);

我试图解析一个值为“-51.739253997802734”的经度

状况

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;