取4位有效数字的存储过程或函数怎么写?

xiejiangjun 2008-11-11 01:13:57
输入的数字,可能是整数,也可能是小数,不管是整数或小数,我想要的是处理后,得到4为有效数字。
...全文
355 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
昵称被占用了 2008-11-11
  • 打赏
  • 举报
回复
考虑不周

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
昵称被占用了 2008-11-11
  • 打赏
  • 举报
回复
create 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
while @f>1
begin
set @d=@d+1
set @f=@f/10
end

return ROUND(@f,@i)*power(10,@d)
end
go

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
等不到来世 2008-11-11
  • 打赏
  • 举报
回复
有效数字从左边第一个非0数字开始计算。
linguojin11 2008-11-11
  • 打赏
  • 举报
回复

1、有效数字

  当用毫米刻度尺量书本时,测量长度为184.2mm,最末位数字2是估计出来的,是不可靠数字,但仍然有意义,仍然要写出来。这种带有一位不可靠数字的近似数字,叫做有效数字。

2、有效数字位数的判断方法

  在有效数字中,数2.7、2.70、2.700的含义是不同的,它们分别代表二位、三位、四位有效数字。数2.7表示最未一位数字7是不可靠的,而2.70和2.700则表示最后一位数字0是不可靠的。因此,小数最后的零是有意义的,不能随便舍去或添加。但是,小数的第一个非零数字前面的零是用来表示小数点位置的,不是有效数字。例如,0.92、0.085、0.0063都是两位有效数字。大的数目,如365000,如果不全是有效数字,就不要这样写,可以写成有一位整数的小数和10的乘方的积的形式,如果有三位有效数字,就写成3.65×105,如果有四位有效数字,就写成3.650×105。

等不到来世 2008-11-11
  • 打赏
  • 举报
回复
create table tb(num float)
insert tb
select 12345 union all
select 123456.12 union all
select 2222.88 union all
select 123.444 union all
select 0.43 union all
select -0.444555
--保留4位有效数字
select case when charindex('.',num)=0 then left(num,4)
else case when abs(num)<1 then
case when len(abs(num))>6 then rtrim(round(num,4))
else rtrim(round(num,4))+replicate('0',6-len(abs(num)))
end
else rtrim(round(num,5-charindex('.',abs(num))))
end
end
from tb

/*
1234
1234
2223
123.4
0.4300
-0.4446
*/
drop table tb
csdyyr 2008-11-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 Haiwer 的回复:]
有效数字是数学概念,貌似大家都不认识了

[/Quote]
真的忘记了
昵称被占用了 2008-11-11
  • 打赏
  • 举报
回复
有效数字是数学概念,貌似大家都不认识了
csdyyr 2008-11-11
  • 打赏
  • 举报
回复
DECLARE @S VARCHAR(10)
SET @S='10'
SELECT CAST(@S AS DECIMAL(10,4))
/*
10.0000
*/
hyde100 2008-11-11
  • 打赏
  • 举报
回复
楼主研究 str 函数
hyde100 2008-11-11
  • 打赏
  • 举报
回复
declare @n int
set @n=10

select rtrim(ltrim(str(@n,20,4)))
结果:
10.0000
zjcxc 2008-11-11
  • 打赏
  • 举报
回复
另外"输入的数字,可能是整数,也可能是小数", 你的输入数据类型定义的是什么?
zjcxc 2008-11-11
  • 打赏
  • 举报
回复
怎么为有效?
去掉小数点后面的?
还是输入的数据里面的随便4个?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧