日期:2014-05-18  浏览次数:20422 次

SQL除法小数点位数问题
表内容如下:
e10                                   e11                                     e9
8412.277206 8412.27720679 1.00000000
它们的数据类型都为numeric(16,8)
但执行select   e11/e9   from   table   时,值为8412.277206   切除了后面两位小数,请问这是什么原因?如果要精确到8位小数要怎么做?


------解决方案--------------------
没理由会这样啊,不明白什么原因

可以试试转换一下 select cast(e11/e9 as numeric(16,8)) from table

------解决方案--------------------
select cast(cast(e11 as float)/cast(e9 as float) as decimal(18,8)) from table

------解决方案--------------------
select cast((e11*1.00/e9) as decimal(18,2)) from table 试试这个
------解决方案--------------------
转换为decmail
------解决方案--------------------
楼上的是decimal,不是decmail
------解决方案--------------------
/*
哈,大家看出什么规律了吗?
*/
declare @a numeric(38,20),@b numeric(38,0),@c numeric(38,1),@d numeric(38,2),@e numeric(38,3),@f numeric(38,4),@g numeric(38,5)
select @a=1.12345678912345678912, @b=1, @c=1, @d=1, @e=1, @f=1, @g=1
print @a
print @a/@b
print @a/@c
print @a/@d
print @a/@e
print @a/@f
print @a/@g

------解决方案--------------------
create table table_a(e10 float,e11 float,e9 float)
insert into table_a select 8412.27720,68412.27720,6791.00000000

select cast(e11/e9 as numeric(18,8)) from table_a

---------------------------------------
10.07396219