ОБНОВИТЬ
Проблема заключалась в локали пользователя! Я решил проблему с
double lat = double.Parse(Request.Form["lat"], CultureInfo.InvariantCulture);
Актуальный вопрос
Это моя первая попытка реализовать местоположение на моем мобильном сайте. Я получаю местоположение пользователя со своего телефона с помощью API геолокации w3 и конвертирую его в 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);
}
CreateParameter
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. - person Henk Holterman   schedule 05.12.2011E+16это твоя проблема. Вы где-то теряете десятичную точку? - person Rup   schedule 05.12.2011