存储过程浮点输入参数截断值

时间:2011-04-17 10:59:55

标签: sql-server stored-procedures input-parameters

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

  @Latitude float
, @Longitude float

但是当我传递这些值时:

 @Latitude=-28.640328248358344
,@Longitude=153.61249352645871

表中存储的值是:

Lat: -28.6403
Lng: 153.612

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

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

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

编辑: 我将这些值插入到类型为geography的列调用GeoLocation中:

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

试试这个:

DECLARE @Longitude FLOAT = 41.1234567

SELECT CAST(@Longitude AS VARCHAR(24))

你的结果是什么?在我的情况下,似乎SQL Server将始终截断到小数点后的四位数.....

导致截断的原因?实际上只有转换为VARCHAR导致截断?尝试将值存储在您的sproc中FLOAT并查看这些值是否也被截断 - 我很确定它们不会被删除!