当前位置: 代码迷 >> Sql Server >> 很奇怪的real类型小数有关问题
  详细解决方案

很奇怪的real类型小数有关问题

热度:44   发布时间:2016-04-24 10:11:31.0
很奇怪的real类型小数问题
各位老大
小弟在使用sqlserver 2k的时候遇到一个问题

表结构如下: 

CREATE TABLE [dbo].[T0010_Sco_29_o] (
[examcode] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[A1] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[O1] [real] NULL ,
[O2] [real] NULL ,
[O3] [real] NULL ,
[O4] [real] NULL ,
[O5] [real] NULL ,
[O6] [real] NULL ,
[O7] [real] NULL ,
[O8] [real] NULL ,
[O9] [real] NULL ,
[O10] [real] NULL ,
[O11] [real] NULL ,
[O12] [real] NULL ,
[O13] [real] NULL ,
[O14] [real] NULL ,
[O15] [real] NULL ,
[kg] AS ([o1] + [o2] + [o3] + [o4] + [o5] + [o6] + [o7] + [o8] + [o9] + [o10] + [o11] + [o12] + [o13] + [o14] + [o15]) ,
[paper] [char] (1) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY]
GO

 
其中用到了一个计算列 ,kg为其他列的和
然后问题是如果o1...o15这些列当中如果有小数的话,kg不会是前面的列的和,而是和前面列的和相近似的一个数,比如20.999999999,或者 15.4000002等
请问,这是如何产生的,或者如何能避免产生
------解决方案--------------------
real本来就是近似值,不能保证数据的准确性,float也一样,可以用numeric、decimal来存储准确值
------解决方案--------------------
把rel 换成 Decimal(10,3)
  相关解决方案