2013-03-30 41 views
1

我想将varchar转换为bigint。然后将其插入到int列中。我发现我没有得到预期的价值。然后我尝试下面的语句:cast varchar浮动到bigint

DECLARE @varData VARCHAR(50) 

SET @varData = '0000019.33' 

select cast(@varData *cast(100 as float) as bigint) 

select cast(@varData *cast(100 as float) as varchar) 

select cast(cast(@varData *cast(100 as float) as varchar) as float) 

结果:

1932 

1933 

1933 

我无法理解为什么这种差异正在到来。但是,当我将值更改为0000029.33时,结果没有差异。

我被卡住,没有任何想法,为什么它是如此发生。需要帮助..!!!

回答

1

这是因为SQL一轮的数据,所以让我们如果u挑错说整数,而不是2.97 U将得到3 现在试着想象有多少数据都将丢失如果u要转换只是0.000002 :) 希望你更好地了解现在

DECLARE @varData VARCHAR(50), 
     @float float, 
     @bigint bigint 

SET @varData = '0000019.33'  
set @bigint = convert (bigint, (convert (float, @vardata))) 
print @bigint 
--or 
set @float= convert (float, @vardata) 
set @bigint=convert (bigint, @float) 
print @bigint 
+0

我改变了值“0000019.73”,我得到了1973年,没有四舍五入。同样的'0000029.33',我得到2933的所有查询。 – AmarSharma

+0

而乌尔改变号码u能切换甚至0000000000000000000029.29 当乌尔转换变量例如 声明丢失的发生@ck诠释 组@ CK = 1.56 选择投数据不会丢失(@ck为varchar) – DnL