最简单的的乘法。
declare   @num1   numeric(28,8),@num2   numeric(28,8),@num3   numeric(28,8)    
 select   @num1=1.0,@num2=0.0002046    
 select   @num3=@num1*@num2    
 select   @num3     
 为什么结果不是0.0002046而是0.0002050? 
 如果要使得到的结果保持在小数点后8位有效,要怎么做?
------解决方案--------------------很奇怪
------解决方案--------------------declare @num1 float--numeric(28,8) 
        ,@num2 float--float--numeric(28,8) 
        ,@num3 float--numeric(28,8)  
 select @num1=1.0,@num2=0.0002046  
 select @num3=@num1*@num2  
 select @num3                                                         
 -----------------------------------------------------  
 2.0460000000000001E-4   
 (影響 1 個資料列)   
------解决方案--------------------呵呵。是比较怪。期待高手回复。。     
------解决方案--------------------declare @num1 real,@num2 real,@num3 real 
 select @num1=1.0,@num2=0.00020046 
 select @num3=@num1*@num2  
 select @num3                              
 ------------------------  
 0.00020046   
 (1 row(s) affected)
------解决方案--------------------把numeric 改為real 也可以精確到8位
------解决方案--------------------学习,为什么numeric却不行呢??
------解决方案--------------------declare @num1 int,@num2 numeric(28,8),@num3 numeric(28,8) 
 select @num1=1.0,@num2=0.00020460 
 select @num3=@num1*@num2 
 select @num3                                      
 ------------------------------  
 .00020460   
 (所影响的行数为 1 行)   
------解决方案--------------------decimal与 numeric 同义, 它们的定义是: decimal[ (p[ , s] )]  
 当两个 decimal 相乘时,其结果的类型提 decimal, 其精度和小数位的算法是 
 结果精度   = p1 + p2 + 1 
 结果小数位 = s1 + s2 
 结果精度和小数位数的绝对最大值为 38。当结果精度大于 38 时,相应的小数位数会减少,以避免结果的整数部分被截断 
------解决方案--------------------照楼主的定义 
 计算结果的数据类型是 numeric 
 结果精度   = p1 + p2 + 1 = 28 + 28 + 1 = 57 
 结果小数位 = s1 + s2     = 8 + 8       = 16 
 结果的精度大于 38 , 于是为 38,然后会减少小数位,以避免整数部分被截断,这样小数于就没有 16 了,至于这些小数位减少是如何算的,没有找到资料   
 我只可以可以查到 @num1 * @num2 的结果数据类型是 numeric(38, 6) 
------解决方案--------------------所以,如果楼主把精度定小一点,说它两个加起来不那么长,比如不超过 38, 或者加起来虽然 38, 但不超过很多,这样小数位会减少得少一些,只要小数位减少控制到楼主要的 8 位以上,则结果都是楼主要的了
------解决方案---------------------- 下面演示如何知道计算结果类型信息   
 -- 测试数据 
 DECLARE  
 	@num1 numeric(21,7), 
 	@num2 numeric(21,9), 
 	@num3 numeric(28,8)    
 SELECT  
 	@num1 = 1.0, 
 	@num2 = 0.1002046  
 SELECT 
 	@num3 = @num1*@num2 
 SELECT @num3   
 -- 了解计算结果类型信息 
 DECLARE  
 	@_num3 sql_variant 
 SELECT 
 	@_num3 = @num1 * @num2   
 SELECT  
 	Type = SQL_VARIANT_PROPERTY(@_num3 ,  'BaseType ' ), 
 	Precision = SQL_VARIANT_PROPERTY(@_num3 ,  'Precision ' ), 
 	Scale = SQL_VARIANT_PROPERTY(@_num3 ,  'Scale ' ) 
------解决方案--------------------老大到底是老大
------解决方案--------------------報告,玩了一下,ms到 
 DECLARE  
 	@num1 numeric(23,8),