SQLSERVER 四舍五入和"见分进角"

在处理数据中,经常遇到 四舍五入,以及“见分进角”(即:后一位数字大于0就进位)

四舍五入:通常可以用round函数 语法:round(@data,@digit),

例如:round(23.5729,3) = 23.5730

 

见分进角:即后一位数字大于0就进位。

if exists (SELECT 1 FROM SYSOBJECTS WHERE ID = OBJECT_ID('DBO.CEIL_IN'))

DROP FUNCTION CEIL_IN

GO


CREATE Function ceil_in (@number varchar(20),@digit int) --两个参数,@number待处理数据;@digit需要保留几位小数。
returns decimal(18,4)
as 
begin
  declare @int_part varchar(10),@decimal_part varchar(10),@decimal_part1 varchar(10)
  if charindex('.',@number) <> 0
      begin
          --对@number进行拆分,分成整数部分以及小数部分
          set @int_part = left(rtrim(@number),charindex('.',@number,0))
          set @decimal_part = right(rtrim(@number),len(rtrim(@number)) - charindex('.',rtrim(@number),0))
          
          if len(@decimal_part) > @digit 
              begin
                    --对小数部分再进行拆分进而得到另一个小数
                    set @decimal_part1 = left(@decimal_part,@digit) + '.' + right(@decimal_part,len(@decimal_part) - @digit) 
                if  len(ceiling(@decimal_part1)) <> @digit and left(@decimal_part1,1) <> '0'
                    set @number = cast((cast(cast(@number as float) as int) + 1) as varchar(10))
                else
                    begin
                        --set @decimal_part = ceiling(@decimal_part1)
                        set  @decimal_part = left('00000000000000',CHARINDEX('.',@decimal_part1) - 1 - len(ceiling(@decimal_part1))) + convert(varchar(10),ceiling(@decimal_part1))
                        set @number = @int_part + @decimal_part
                    end
             end
     end
    return (convert(decimal(18,4),@number))
end

例如 ceil_in(23.111,2) = 23.12

优点:返回的数就是数字型的,可以直接进行运算。

注意:最终返回的是decimal(18,4)的数字,可根据需要自行调整。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值