三九宝宝网宝宝百科宝宝知识

SQLServer中的Rounding函数

12月04日 编辑 39baobao.com

[Excle函数中的最大值和最小值如何用]2填入一些数据作为事例。3选中一个放最大值的单元格。4找到顶部菜单栏中的公式-》自动求和-》最大值。5选择之后,系统会自动帮我们选择要计算的范围,你也可以自己选择你想...+阅读

应用中使用四舍五入的值,我和我的用户在报表应用中的计算问题存在分歧。所有的代码都在T-SQL中,但是我认为报表问题与数据类型和向下取整或向上取整规则关系密切。请问您有没有这方面的高见?我想看到一些带有不同编码选项的例子。

Examda提示:如果不理解基本的数据类型和四舍五入函数,那么你就可能误解四舍五入。由于数据类型的差异(比如integer,float, decimal等等),四舍五入后的值可能会不同。另外,由于在计算中使用的SQL Server舍入函数(ROUND(),CEILING(),FLOOR())的差异,得到的结果值也可能会不同。因此,找到用户对四舍五入的要求接着把这些要求转化到适当的T-SQL命令中是很重要的。

让我们先从定义的角度开始:

l ROUND() – 四舍五入一个正数或者负数,结果为一定长度的值。

l CEILING() - 返回最小的整数,使这个整数大于或等于指定数的数值运算。

l FLOOR() - 返回整数,使这个整数小于或等于指定数的数值运算。

让我们来看看有不同数据类型的函数的结果。

ROUND(),CEILING()和FLOOR()例子

例子

在这个例子中,你可以看到,在一个正整数的情况下,这三个舍入函数返回相同的值。

DECLARE #value int

SET #value = 6

SELECT ROUND(#value, 1)

SELECT CEILING(#value)

SELECT FLOOR(#value)

6

6

6

在第二个例子中,即使在一个负整数的情况下,这三个舍入函数还是返回相同的值。

DECLARE #value int

SET #value = -11

SELECT ROUND(#value, 1)

SELECT CEILING(#value)

SELECT FLOOR(#value)

-11

-11

-11

要证明整数这个观点,四舍五入是不可能的。让我们来看看一些其他的数据类型。

DECLARE #value int

SET #value = -11.5

SELECT ROUND(#value, 2)

SELECT CEILING(#value)

SELECT FLOOR(#value)

-11

-11

-11

在我们的例子中,用一个小数数据类型和不同长度参数(比如1,2或者3)的舍入函数会产生不同的终值。当四舍五入这个值并且长度参数是1时,小数点后第二位的5是有意义的。另外,在小数数据类型中,CEILING和 FLOOR函数也会考虑小数位,因为会得到不同的值。

DECLARE #value decimal(10,2)

SET #value = 11.05

SELECT ROUND(#value, 1)

SELECT ROUND(#value, 2)

SELECT ROUND(#value, 3)

SELECT CEILING(#value)

SELECT FLOOR(#value)

11.10

11.05

11.05

12

11

如同上面的例子,基于不同的长度参数,小数点后第二位的6是有意义的。

DECLARE #value decimal(10,2)

SET #value = -14.46

SELECT ROUND(#value, 1)

SELECT ROUND(#value, 2)

SELECT ROUND(#value, 3)

SELECT CEILING(#value)

SELECT FLOOR(#value)

-14.50

-14.46

-14.46

-14

-15

这个例子也有助于描述四舍五入值的破坏。这个例子也证明了CEILING和 FLOOR 函数四舍五入成最近的函数。

DECLARE #value decimal(10,10)

SET #value = .5432167890

SELECT ROUND(#value, 1)

SELECT ROUND(#value, 2)

SELECT ROUND(#value, 3)

SELECT ROUND(#value, 4)

SELECT ROUND(#value, 5)

SELECT ROUND(#value, 6)

SELECT ROUND(#value, 7)

SELECT ROUND(#value, 8)

SELECT ROUND(#value, 9)

SELECT ROUND(#value, 10)

SELECT CEILING(#value)

SELECT FLOOR(#value)

0.5000000000

0.5400000000

0.5430000000

0.5432000000

0.5432200000

0.5432170000

0.5432168000

0.5432167900

0.5432167890

0.5432167890

1

0

在最后的例子中,你可以看到在浮点数据类型里采取与上面小数点的例子相同类型的行为。另外,CEILING和FLOOR函数四舍五入成最近的函数。

DECLARE #value float(10)

SET #value = .1234567890

SELECT ROUND(#value, 1)

SELECT ROUND(#value, 2)

SELECT ROUND(#value, 3)

SELECT ROUND(#value, 4)

SELECT ROUND(#value, 5)

SELECT ROUND(#value, 6)

SELECT ROUND(#value, 7)

SELECT ROUND(#value, 8)

SELECT ROUND(#value, 9)

SELECT ROUND(#value, 10)

SELECT CEILING(#value)

SELECT FLOOR(#value)

0.1

0.12

0.123

0.1235

0.12346

0.123457

0.1234568

0.12345679

0.123456791

0.123456791

1

0

以下为关联文档:

EXCLE中的VLOOKUP函数如何使用2把表二的数据用VLOOKUP函数导入表一中3查找值:姓名一行数据表:选表二从姓名一列到对应的数据列列序数:从姓名一列到对应的数据列对应的列数匹配条件:写04得出对应数字,就往...

多条件求和函数Sumifs的用法2首先输入=sumif,然后按Tab键确定,我们要对数量进行求和,所以先将数量从头拉到尾(C2:C8),然后在C2:C8后面输入英文逗号,再选择第一个条件-日期(A2:A8),点击条件的具体内容,也就是大...

SUMIF求和函数的用法2第一种, 省略第三个参数时的情况,求语文成绩大于80分的总和,公式为=SUMIF(B2:B7,80)B2:B7为语文成绩所在的区域,80,为条件设定,这里必须要用才能有效3由于第三个参数省略,条件...

如何自定义函数2然后点击插入---模块,如图:3然后在模块1中出入,三角形面积公式函数(Function V(a,b,h)V = h*(a+b)/2End Function),如图:4关闭模块,自定义函数完成扩展选定区域快捷键End+Shi...

Excle怎么用函数在文字中提取手机号4通过以上计算,便可以轻松得出文本中的手机号,但是,在上例中也会出现一个问题,就是在手机号之前并未出现1,如果在更复杂的文本中,这个公式就会失灵,我们就要用到更为复杂的组合函数...

运用Excel三大条件函数解决实际问题秋尽冬至,又到一年年终时。在工作中,数据的运算量和汇总的操作一下比平时多了不少。众所周知,在Excel中可以对数据进行各种不同的运算和汇总,今天我向大家介绍与条件相关的函数...

SQLServerweblogic配置连接池问题在配置连接池的时候有时会出现“JDBC driver is not on the CLASSPATH”这是因为我们的创建连接池所需要的驱动相应数据库jar包没有找到比如拿sqlserver2000来举例:创建s...

SQLServer2000工具的中英文互换SQL Server 2000 扩展了 Microsoft SQL Server 7.0 版的性能、可靠性、质量和易用性,对于中国用户来说,这是Microsoft SQL Server的第一个全汉化产品,尤其是其强大的联机帮助,为...

WPS技巧:TRIMMEAN函数计算选手得分如图1就是某大奖赛的选手评分情况表。 图1 在“最后得分”一项中,我们可以用LARGE函数或SMALL函数来计算,如在J3中输入下面的公式: =AVERAGE(LARGE(B3:I3,{2,3,4,5,6,7})) 即可...

推荐阅读
图文推荐