【发布时间】: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 列中的数据类型为浮点数
标签: c# sql-server-2008 geolocation