System.FormatException:24201:纬度值必须在 -90 到 90 度之间
Posted
技术标签:
【中文标题】System.FormatException:24201:纬度值必须在 -90 到 90 度之间【英文标题】:System.FormatException: 24201: Latitude values must be between -90 and 90 degrees 【发布时间】:2011-12-05 16:37:40 【问题描述】:更新
问题是用户的语言环境! 我已经用
对问题进行了分类double lat = double.Parse(Request.Form["lat"], CultureInfo.InvariantCulture);
实际问题
这是我第一次尝试在我的移动网站上实现定位。我正在使用 w3 地理定位 API 从他们的手机获取用户的位置并将其转换为双精度,然后将其作为浮点数存储在 sqlserver 中。
在大多数情况下,它可以正常工作,但在某些情况下,手机提供的坐标很长。例如,纬度可能是3.1234567890123
,所以点后有 14 个数字。
这会保存为3.1234567890123+E16
,当我尝试计算用户到某个点的距离时,会导致标题出错。
避免它的最佳方法是什么?我应该将用户的输入修剪到一定长度以便正确转换吗?
获取和保存数据的方法
double lat = Convert.ToDouble(Request.Form["lat"]);
double lng = Convert.ToDouble(Request.Form["lng"]);
user.UpdateMyLocationCoordinates(user.id, lat, lng);
public void UpdateMyLocationCoordinates(int userId, double lat, double lng)
SiteDbHelper db = new SiteDbHelper();
List<SqlParameter> sqlParameters = new List<SqlParameter>();
sqlParameters.Add(db.CreateParameter("@userId", SqlDbType.Int, userId));
sqlParameters.Add(db.CreateParameter("@latitude", SqlDbType.Float, lat));
sqlParameters.Add(db.CreateParameter("@longitude", SqlDbType.Float, lng));
db.UpdateInsertDeleteReturnAffectedRowCount ("SocialSiteUser_UpdateMyLocationCoordinates", CommandType.StoredProcedure, sqlParameters);
创建参数
public SqlParameter CreateParameter(string name, SqlDbType type, double value)
SqlParameter param = new SqlParameter(name, value);
param.SqlDbType = type;
return param;
SP o 存储数据是
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
【问题讨论】:
您应该发布您的输入、您运行的计算以及您格式化结果的实际部分。 数字太多与-90 ... 90
范围无关。
我正在通过手机发帖,但使用精确的纬度输入更新了问题。将更新休息位层
E+16
是你的问题。您是否在某处丢失了小数点?
我正在将输入转换为双精度并保存到 SQL 服务器。 SQL server 列中的数据类型为浮点数
【参考方案1】:
问题是用户的语言环境!我已经对问题进行了排序
double lat = double.Parse(Request.Form["lat"], CultureInfo.InvariantCulture);
【讨论】:
【参考方案2】:虽然3.1234567890123+E16
是一个有效的浮点数,但它比 90 大很多,所以它不是一个有效的纬度,它必须位于 -90
和 +90
度之间。
另外,3.1234567890123
实际上是3.1234567890123+E01
,所以我不确定它是如何在转换为3.1234567890123+E16
时乘以10^16
。
【讨论】:
实际存储值为3.9951341674225E+16, 3.27377879977052E+16 @nLL 这些不是有效的纬度(或经度) - Request["lat"] 中的确切字符串是什么? @nLL 例如 3.9951341674225E+16 大致相当于 39951341674225000 (我们在您给出的示例中总共只有 14 位精度),所以如果您有 17 位数字,没有小数点, 它将是 X.XXXXE+16 的科学计数法。 感谢我与用户取得联系并与他们一起进行测试以了解发生了什么。我会进一步更新。 终于!我能够通过在 SP 中使用“@lat float(53)”而不是“@lat float”来使其工作以上是关于System.FormatException:24201:纬度值必须在 -90 到 90 度之间的主要内容,如果未能解决你的问题,请参考以下文章
无法启动 Kestrel。 System.FormatException:无效的 URL:'http:////*:80'
数组中的“System.FormatException:'输入字符串格式不正确”错误
DatePicker System.FormatException
System.FormatException:索引(从零开始)必须大于或等于零且小于参数列表的大小