C# System.FormatException:24201:纬度值必须介于-90和90度之间 使现代化

C# System.FormatException:24201:纬度值必须介于-90和90度之间 使现代化,c#,sql-server-2008,geolocation,C#,Sql Server 2008,Geolocation,问题是用户的区域设置! 我已经和你解决了这个问题 double lat = double.Parse(Request.Form["lat"], CultureInfo.InvariantCulture); 实际问题 这是我第一次尝试在我的移动站点上实现定位。我使用w3 geolocation API从他们的手机中获取用户的位置,并将其转换为double,然后将其作为float存储在sqlserver中 在大多数情况下,它工作正常,但在某些情况下,手机提供的坐标相当长。例如,纬度可能是3.123

问题是用户的区域设置! 我已经和你解决了这个问题

double lat = double.Parse(Request.Form["lat"], CultureInfo.InvariantCulture);
实际问题 这是我第一次尝试在我的移动站点上实现定位。我使用w3 geolocation API从他们的手机中获取用户的位置,并将其转换为double,然后将其作为float存储在sqlserver中

在大多数情况下,它工作正常,但在某些情况下,手机提供的坐标相当长。例如,纬度可能是3.1234567890123,因此点后有14个数字

这将保存为3.1234567890123+E16,并在我尝试计算用户到某个点的距离时导致标题中出现错误

最好的避免方法是什么?我是否应该将用户的输入修剪到一定长度,以便正确转换

获取和保存数据的方法 SP o存储数据为 虽然3.1234567890123+E16是一个有效的浮动,但它远大于90,因此不是一个有效的纬度,它必须位于-90度和+90度之间


此外,3.1234567890123实际上是3.1234567890123+E01,所以我不确定在转换为3.1234567890123+E16的过程中它是如何乘以10^16的。

问题在于用户的区域设置!我已经和你解决了这个问题

 double lat = double.Parse(Request.Form["lat"], CultureInfo.InvariantCulture);

你应该公布你的输入,你运行的计算,以及你格式化结果的实际部分。太多的数字与-90无关。。。90范围。我在手机上发帖,但用准确的纬度输入更新了问题。将更新rest一点Layer+16是您的问题。您是否丢失了小数点?我正在将输入转换为双精度并保存到SQL server。SQL server列中的数据类型为float实际存储值为3.9951341674225E+16、3.27377879977052E+16@nLL这些是无效的纬度或经度-请求[lat]中的确切字符串是什么?@nLL例如3.995134674225E+16大致相当于39951341674225000我们在您给出的示例中总共只有14位精度,所以,如果你有17位数字,没有小数,它将是X.XXXXE+16,在科学记数法中。谢谢,我已经和用户取得了联系,并与他们进行了测试,看看发生了什么。我将进一步更新。最后!我能够通过使用@lat float53而不是SP中的@lat float使其工作
public SqlParameter CreateParameter(string name, SqlDbType type, double value)
{
    SqlParameter param = new SqlParameter(name, value);
    param.SqlDbType = type;
    return param;
}
ALTER PROCEDURE [dbo].[SocialSiteUser_UpdateMyLocationCoordinates]
@userId int,
@latitude float,
@longitude float
AS
BEGIN
    SET NOCOUNT ON
    update domains_users set latitude=@latitude, longitude=@longitude where id=@userId
END
 double lat = double.Parse(Request.Form["lat"], CultureInfo.InvariantCulture);