天花板和地板怀疑 [英] Ceiling and Floor doubt

查看:94
本文介绍了天花板和地板怀疑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 声明  @ value  十进制 
SET @ value = 11 49
SELECT ceiling( @ value





o / p - > 11



 声明  @value   decimal  
SET @value = 11 51
SELECT ceiling( @ value





o / p - > 12



------------------------但这是如何变化的如下所示------------------------------



 声明  @ value   decimal  10  4 
SET @ value = 11 51
SELECT ceiling( @ value





o / p - > 12



 声明  @ value   decimal  10  4 
SET @ value = 11 49
SELECT ceiling( @ value





o / p - > 12





----------------------------地板表现相同喜欢天花板---------------------------



 声明  @ value   decimal  
SET @ value = 11 49
SELECT floor( @ value





o / p - > 11



 声明  @value   decimal  
SET @value = 11 51
SELECT floor( @ value





o / p - > 12





----------------我得到的结果像如果我在这下面改变如下这个------------------------



 声明  @ value   decimal  10  4 
SET @ value = 11 11
SELECT floor( @ value





o / p - > 11



 声明  @ value   decimal  10  4 
SET @ value = 11 88
SELECT floor( @ value





o / p-- > 11





请清楚楼层和天花板的疑问

解决方案

< blockquote>那是因为在声明变量@Value时你使用了十进制数据类型,你没有指定精度和比例..所以它会考虑默认的精度和比例..

默认精度为18,Scale为0

 声明  @ Value   decimal    -   相当于Declare @值十进制(18,0) 



在这种情况下

  DECLARE   @ value   DECIMAL    -   (18,0) 
SET @ value = 11 49
选择 @ Value as 值,上限( @ value as CeilingValue,Floor( @ Val ue as FloorValue



输出将为:

价值CeilingValue FloorValue 
11 11 11



如果您指定精度和比例,那么它将是:

  DECLARE   @ value   DECIMAL  10  4 
SET @ value = 11 49
选择 @ Value as 值,上限( @ value as CeilingValue,Floor( @ Value as FloorValue



输出将为:

 Value CeilingValue FloorValue 
11 4900 12 11





查看此链接: http:// msdn。 microsoft.com/en-us/library/ms187746.aspx [ ^ ]


您好,请看这个链接:)



http://msdn.microsoft.com/en-us/library/ms190927(v=sql。 105).aspx [ ^ ]



http://www.mssqltips.com/sqlservertip/1589/sql-server-rounding-functions--round-天花板和地板/ [ ^ ]


运行查询并检查输出,希望它能清除疑点。

 声明  @ value    decimal   < span class =code-comment>  -   注意您已声明十进制类型但未设置精度。所以val。将被舍入。 
SET @ value = 11 51 - 它以12为i / p。
- 如果你通过11.49,它将会因为声明中没有指定精度限制,所以自动应用舍入和原始值为11.
SELECT @ value as Original_val,ceiling( @ value as ceiling_val,floor( @ value as floor_val

声明 @ val decimal 10 , 4
SET @val = 11 49
SELECT @ val as Original_val,ceiling( @ val as ceiling_val,floor( @ val as floor_val
SET @ val = < span class =code-digit> 11 。 51
SELECT < span class =code-sdkkeyword> @ val as Original_val,ceiling( @ val as ceiling_val,floor( @ val as floor_val





快乐编码!

:)


declare @value decimal
SET @value = 11.49
SELECT ceiling(@value)



o/p --> 11

declare @value decimal
SET @value = 11.51
SELECT ceiling(@value)



o/p -->12

------------------------But how this changes as below------------------------------

declare @value decimal(10,4)
SET @value = 11.51
SELECT ceiling(@value)



o/p-->12

declare @value decimal(10,4)
SET @value = 11.49
SELECT ceiling(@value)



o/p-->12


----------------------------Floor behaving same like ceiling---------------------------

declare @value decimal
SET @value = 11.49
SELECT floor(@value)



o/p --> 11

declare @value decimal
SET @value = 11.51
SELECT floor(@value)



o/p -->12


----------------I get result like this below if i change below like this------------------------

declare @value decimal(10,4)
SET @value = 11.11
SELECT floor(@value)



o/p-->11

declare @value decimal(10,4)
SET @value = 11.88
SELECT floor(@value)



o/p-->11


Kindly clear the doubt of floor and ceiling

解决方案

That's Because while Declaring the Variable @Value u used Decimal data type, u haven't specified the precision and scale.. so it will consider the default Precision and Scale..
Default Precision is 18 and Scale is 0

Declare @Value decimal-- is equivalent to Declare @Value Decimal(18,0)


in that case

DECLARE @value DECIMAL--(18,0)
SET @value = 11.49
Select @Value as Value,ceiling(@value) as CeilingValue,Floor(@Value) as FloorValue


The Output will be:

Value	 CeilingValue	FloorValue
11        11	         11


Where as if u specify the precision and scale then it will be:

DECLARE @value DECIMAL(10,4)
SET @value = 11.49
Select @Value as Value,ceiling(@value) as CeilingValue,Floor(@Value) as FloorValue


the Output will be:

Value	CeilingValue	FloorValue
11.4900	    12	         11



Check this Link:http://msdn.microsoft.com/en-us/library/ms187746.aspx[^]


Hi, see this link:)

http://msdn.microsoft.com/en-us/library/ms190927(v=sql.105).aspx[^]

http://www.mssqltips.com/sqlservertip/1589/sql-server-rounding-functions--round-ceiling-and-floor/[^]


Run Query and check output hope it will clear doubts.

declare @value decimal --NOTE you have declared decimal type but not set precision. so val. will be rounded.
SET @value = 11.51 --it's taking 12 as i/p.
--if you pass 11.49, it will auto apply rounding and original val will be 11. just because no precision limit is specified in declaration.
SELECT @value as Original_val, ceiling(@value) as ceiling_val,floor(@value) as floor_val

declare @val decimal(10,4)
SET @val = 11.49
SELECT @val as Original_val, ceiling(@val) as ceiling_val,floor(@val) as floor_val  
SET @val = 11.51
SELECT @val as Original_val, ceiling(@val) as ceiling_val,floor(@val) as floor_val



Happy Coding!
:)


这篇关于天花板和地板怀疑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆