0

我有一个具有输入参数的存储过程:

  @Latitude float
, @Longitude float

但是当我传递这些值时:

 @Latitude=-28.640328248358344
,@Longitude=153.61249352645871

存储在表中的值是:

Lat: -28.6403
Lng: 153.612

如果我在表上进行标准插入或更新,则值是正确的。

我尝试将参数更改为 float(54) 但没有任何区别......我使用浮点数的原因是因为 Lat/Lng 实际上是从地理列计算出来的列(并且它在设计器中声明它们是浮点数) - 我通过将存储过程中的 lat/lng 值插入到几个 varchar 列中,仔细检查了它是否与计算的 cols 无关。

我正在使用 EF 并且可以确认实体中的值是正确的,并且我已经检查了 SQL Profiler 以确认完整的值包含在 exec 调用中。

编辑:我将这些值插入到地理类型的名为 GeoLocation 的列中:

GeoLocation = geography::STPointFromText('POINT(' + CONVERT(varchar, @Longitude) + ' ' + CONVERT(varchar, @Latitude) + ')',4326)
4

2 回答 2

3

当您将 float 转换为 varchar 时,您会失去准确性。使用STR转换为 varchar

一条评论说“CONVERT(varchar,@Longitude)”。这不是“截断输入”,而是正常行为

于 2011-04-17T11:16:09.943 回答
1

试试这个:

DECLARE @Longitude FLOAT = 41.1234567

SELECT CAST(@Longitude AS VARCHAR(24))

你的结果是什么??就我而言,SQL Server 似乎总是会在小数点后截断为四位......

这可能是你截断的原因吗?真的只有转换为VARCHAR导致截断?尝试将值存储在您的存储过程中,FLOAT并查看这些值是否也被截断 - 我很确定它们不会被截断!

于 2011-04-17T11:15:28.753 回答