我有一个存储过程有输入参数:
@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)
答案 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
并查看这些值是否也被截断 - 我很确定它们不会被删除!