首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

【求高手解决】sql自定义函数,取有效数字的有关问题

2012-11-18 
【求高手解决】sql自定义函数,取有效数字的问题希望得到的结果如下:select dbo.fn_test(123456,4)--123500

【求高手解决】sql自定义函数,取有效数字的问题
希望得到的结果如下:

select dbo.fn_test('123456',4)
--123500

select dbo.fn_test('1.23456',4)
--1.235

select dbo.fn_test('0.00123456',4)
--0.0012

在CSDN上转载Haiwer大大的程序如下,不能得到上述结果,求解决:
alter function fn_test(
@s varchar(100),
@i int
)
returns float
as
begin
  declare @f float
  set @f=cast(@s as float)
  declare @d int
  set @d=0
  declare @n int 
  if @f>0 
  set @n=1
  else 
  set @n=-1
  set @f=abs(@f)
  while @f>1
  begin
  set @d=@d+1
  set @f=@f/10
  end

  while @f<0.1
  begin
  set @d=@d-1
  set @f=@f*10
  end

  return @n*ROUND(@f,@i)*power(cast(10 as float),@d)
end
go


[解决办法]
或者要想得到 0.0012
原函数不变,调用:select dbo.fn_test('0.00123456',2)

[解决办法]
试试


SQL code
IF OBJECT_ID('fn_test') IS NOT NULL DROP FUNCTION dbo.fn_testgo CREATE FUNCTION fn_test (@s VARCHAR(100) , @i INT)RETURNS FLOATAS BEGIN  DECLARE @f FLOAT  SET @f = CAST(@s AS FLOAT)  DECLARE @d INT  SET @d = 0  DECLARE @n INT    IF @f > 0     SET @n = 1  ELSE     SET @n = -1  SET @f = ABS(@f)  WHILE @f > 1     BEGIN      SET @d = @d + 1      SET @f = @f / 10    END  WHILE @f < 0.1     BEGIN      SET @d = @d - 1      SET @f = @f * 10      SET @i = @i - 1    END  RETURN @n*ROUND(@f,@i)*POWER(CAST(10 AS FLOAT),@d)ENDGO 

热点排行