问题是用户的语言环境! 我用
对问题进行了分类double lat = double.Parse(Request.Form["lat"], CultureInfo.InvariantCulture);
这是我第一次尝试在我的移动网站上实施位置。我使用w3地理定位API从手机获取用户的位置并将其转换为double,然后将其作为float存储在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;
}
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
答案 0 :(得分:0)
虽然3.1234567890123+E16
是有效的浮点数,但它比90大得多,因此不是有效的纬度,它必须介于-90
和+90
度之间。< / p>
此外,3.1234567890123
实际上是3.1234567890123+E01
,因此我不确定在转化中如何乘以10^16
成为3.1234567890123+E16
。
答案 1 :(得分:0)
问题是用户的语言环境!我用
对问题进行了分类 double lat = double.Parse(Request.Form["lat"], CultureInfo.InvariantCulture);