可以用ROUND函数
-------------------------ROUND
返回数字表达式并四舍五入为指定的长度或精度。语法
ROUND ( numeric_expression , length [ , function ] )
注释
ROUND 始终返回一个值。如果 length 是负数且大于小数点前的数字个数,ROUND 将返回 0。示例 结果
ROUND(748.58, -4)-- 0
当 length 是负数时,无论什么数据类型,ROUND 都将返回一个四舍五入的 numeric_expression。示例 结果
ROUND(748.58, -1) --750.00
ROUND(748.58, -2) --700.00
ROUND(748.58, -3) --1000.00
示例
A. 使用 ROUND 和估计值
下例显示两个表达式,说明使用 ROUND 函数且最后一个数字始终是估计值。SELECT ROUND(123.9994, 3), ROUND(123.9995, 3)
GO下面是结果集:----------- -----------
123.9990 124.0000 B. 使用 ROUND 和四舍五入的近似值
下例显示四舍五入和近似值。语句 结果
SELECT ROUND(123.4545, 2)
123.4500
SELECT ROUND(123.45, -2)
100.00
C. 使用 ROUND 截断
下例使用两个 SELECT 语句说明四舍五入和截断之间的区别。第一个语句四舍五入结果。第二个语句截断结果。语句 结果
SELECT ROUND(150.75, 0)
151.00
SELECT ROUND(150.75, 0, 1)
150.00
-------------------------ROUND
返回数字表达式并四舍五入为指定的长度或精度。语法
ROUND ( numeric_expression , length [ , function ] )
注释
ROUND 始终返回一个值。如果 length 是负数且大于小数点前的数字个数,ROUND 将返回 0。示例 结果
ROUND(748.58, -4)-- 0
当 length 是负数时,无论什么数据类型,ROUND 都将返回一个四舍五入的 numeric_expression。示例 结果
ROUND(748.58, -1) --750.00
ROUND(748.58, -2) --700.00
ROUND(748.58, -3) --1000.00
示例
A. 使用 ROUND 和估计值
下例显示两个表达式,说明使用 ROUND 函数且最后一个数字始终是估计值。SELECT ROUND(123.9994, 3), ROUND(123.9995, 3)
GO下面是结果集:----------- -----------
123.9990 124.0000 B. 使用 ROUND 和四舍五入的近似值
下例显示四舍五入和近似值。语句 结果
SELECT ROUND(123.4545, 2)
123.4500
SELECT ROUND(123.45, -2)
100.00
C. 使用 ROUND 截断
下例使用两个 SELECT 语句说明四舍五入和截断之间的区别。第一个语句四舍五入结果。第二个语句截断结果。语句 结果
SELECT ROUND(150.75, 0)
151.00
SELECT ROUND(150.75, 0, 1)
150.00
A B
公式 说明(结果)
=ROUNDUP(3.2,0) 将 3.2 向上舍入,小数位为 0 (4)
=ROUNDUP(76.9,0) 将 76.9 向上舍入,小数位为 0 (77)
=ROUNDUP(3.14159, 3) 将 3.14159 向上舍入,保留三位小数 (3.142)
=ROUNDUP(-3.14159, 1) 将 -3.14159 向上舍入,保留一位小数 (-3.2)
A
数据
20.3
-5.9
12.5493
公式 说明(结果)
=ROUNDDOWN(A2,0) 将 20.3 向下舍入到最接近的整数 (20)
=ROUNDDOWN(A3,0) 将 -5.9 向下舍入 (-5)
=ROUNDDOWN(A4,2) 将数字向下舍入到最接近的百分位,两位小数 (12.54)
select ceiling(10.2)
select floor(10.6)
结果:11,10
declare @v1 decimal(10,4)
select @v1=123.1235
select ceiling(@v1*1000)/1000
select floor(@v1*1000)/1000
结果:
123.2400
123.2300
比如用vb写的dll,其工程名是ClassFun,类名为Fun:Dim excelT As New Excel.Application
Public Function RoundUp(para As String, pos As String) As Double
Dim returnT As DoubleexcelT.Workbooks.Add
excelT.Visible = False
excelT.ActiveCell.FormulaR1C1 = "=roundup(" & para & "," & pos & ")"
returnT = excelT.ActiveCell.ValueStdev = returnT
Set excelT = Nothing
End Function这个dll在sql中就可以用存储过程来调用
如:
declare @o int
declare @s int
declare @out real
declare @para varchar(100),@pos varchar(2)
exec @s=sp_oacreate 'ClassFun.Fun',@o output
if @s<>0
print 'error create object'set @para='23.34234'--被格式参数
set @pos='3'--格式为3位
exec @s=sp_oamethod @o,'RoundUp',@out output, @para,@posselect @out
------------------------
23.343(所影响的行数为 1 行)