2016-10-20 41 views
-1

我遇到什么,当我通过任LTRIMRTRIM传递float值我会形容为完全意外的行为:LTRIM和RTRIM期截断浮点数

CREATE TABLE MyTable 
(MyCol float null) 

INSERT MyTable 
values (11.7333335876465) 

SELECT MyCol, 
     RTRIM(LTRIM(MyCol)) lr, 
     LTRIM(MyCol) l, 
     RTRIM(MyCol) r 
FROM MyTable 

其中给出了以下结果:

MyCol    | lr  | l  | r 
-------------------------------------------- 
11.7333335876465 | 11.7333 | 11.7333 | 11.7333 

我在SQL Server 2014和2016上观察到相同的行为。

现在,我的理解是LTRIMRTRIM应该从一个值中剥离空白空间 - 而不是将其转换为/截断它。

有没有人知道这里发生了什么?


只是为了解释这个背景。我使用一组C#POCO的属性生成SQL查询(结果将用于生成MD5哈希,然后将其与Oracle表中的等效值进行比较),并且为了方便起见,使用LTRIM/RTRIM 。

+2

看起来是转换为字符串以满足功能要求。没有什么奇怪的 –

+4

为什么你试图修剪空白'float数据类型呢?永远不会有任何。这只能应用于字符串表示。 –

+2

因此,当您使用具有浮点值的字符串函数时,您会得到意想不到的行为。那么不要这样做。 –

回答

1

也许你可以使用格式()代替

Declare @F float = 11.7333335876465 
Select format(@F,'#.##############') 

返回

11.7333335876465