就业数据资源平台
当前位置:首页 > 数据库技术
SQLServer中的Rounding函数

  应用中使用四舍五入的值,我和我的用户在报表应用中的计算问题存在分歧。所有的代码都在T-SQL中,但是我认为报表问题与数据类型和向下取整或向上取整规则关系密切。请问您有没有这方面的高见?我想看到一些带有不同编码选项的例子。
  提示:假如不理解基本的数据类型和四舍五入函数,那么你就可能误解四舍五入。由于数据类型的差异,四舍五入后的值可能会不同。另外,由于在计算中使用的SQL Server舍入函数,CEILING,FLOOR)的差异,得到的结果值也可能会不同。因此,找到用户对四舍五入的要求接着把这些要求转化到适当的T-SQL命令中是很重要的。
  让我们先从定义的角度开始:
  l ROUND – 四舍五入一个正数或者负数,结果为一定长度的值。
  l CEILING - 返回最小的整数,使这个整数大于或等于指定数的数值运算。
  l FLOOR - 返回最大整数,使这个整数小于或等于指定数的数值运算。
  让我们来看看有不同数据类型的函数的结果。
  在这个例子中,你可以看到,在一个正整数的情况下,这三个舍入函数返回相同的值。
  DECLARE @value int
  SET @value = 6
  SELECT ROUND
  SELECT CEILING
  SELECT FLOOR
  6
  6
  6
  在第二个例子中,即使在一个负整数的情况下,这三个舍入函数还是返回相同的值。
  DECLARE @value int
  SET @value = -11
  SELECT ROUND
  SELECT CEILING
  SELECT FLOOR
  -11
  -11
  -11
  要证实整数这个观点,四舍五入是不可能的。让我们来看看一些其他的数据类型。
  DECLARE @value int
  SET @value = -11.5
  SELECT ROUND
  SELECT CEILING
  SELECT FLOOR
  -11
  -11
  -11
  在我们的例子中,用一个小数数据类型和不同长度参数(比如1,2或者3)的舍入函数会产生不同的终值。当四舍五入这个值并且长度参数是1时,小数点后第二位的5是有意义的。另外,在小数数据类型中,CEILING和 FLOOR函数也会考虑小数位,因为会得到不同的值。
  DECLARE @value decimal
  SET @value = 11.05
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT CEILING
  SELECT FLOOR
  11.10
  11.05
  11.05
  12
  11
  如同上面的例子,基于不同的长度参数,小数点后第二位的6是有意义的。
  DECLARE @value decimal
  SET @value = -14.46
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT CEILING
  SELECT FLOOR
  -14.50
  -14.46
  -14.46
  -14
  -15
  这个例子也有助于描述四舍五入值的破坏。这个例子也证实了CEILING和 FLOOR 函数四舍五入成最近的函数。
  DECLARE @value decimal
  SET @value = .5432167890
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT CEILING
  SELECT FLOOR
  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
  SET @value = .1234567890
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT ROUND
  SELECT CEILING
  SELECT FLOOR
  0.1
  0.12
  0.123
  0.1235
  0.12346
  0.123457
  0.1234568
  0.12345679
  0.123456791
  0.123456791
  1
  0
就业数据资源平台