SELECT 9.9999 * 1.0241030 * 20 * 12.00 * 12.00 * 12.00 
GO DECLARE @DISCOUNT DECIMAL(18,4) 
set @DISCOUNT = 9.9999 DECLARE @StoragePrice DECIMAL(18,6) 
SET @StoragePrice = 1.024103 DECLARE @Quantity int 
set @Quantity = 20 DECLARE @Height DECIMAL(18,2) 
SET @Height = 12.00 DECLARE @Width DECIMAL(18,2) 
SET @Width = 12.00 DECLARE @Length DECIMAL(18,2) 
SET @Length = 12.00 SELECT @DISCOUNT * @Quantity * @Height * @Width * @Length * @StoragePrice
SELECT SQL_VARIANT_PROPERTY(@DISCOUNT * @Quantity * @Height * @Width * @Length * @StoragePrice,'Precision')
SELECT SQL_VARIANT_PROPERTY(@DISCOUNT * @Quantity * @Height * @Width * @Length * @StoragePrice,'Scale')运行一下,你就知道为什么了。

解决方案 »

  1.   


    SELECT CONVERT(DECIMAL(23,17),@DISCOUNT * @Quantity * @Height * @Width * @Length * @StoragePrice)要一样,只有显示指定转换精度值,变量精度计算在帮助上有说明了。
      

  2.   

    SELECT cast(9.9999 * 1.0241030 * 20 * 12.00 * 12.00 * 12.00  as decimal(18,6))
    go
    /*
                         
    -------------------- 
    353926.457500(所影响的行数为 1 行)
    */DECLARE @DISCOUNT DECIMAL(18,4) 
    set @DISCOUNT = 9.9999 DECLARE @StoragePrice DECIMAL(18,6) 
    SET @StoragePrice = 1.024103 DECLARE @Quantity int 
    set @Quantity = 20 DECLARE @Height DECIMAL(18,2) 
    SET @Height = 12.00 DECLARE @Width DECIMAL(18,2) 
    SET @Width = 12.00 DECLARE @Length DECIMAL(18,2) 
    SET @Length = 12.00 SELECT @DISCOUNT * @Quantity * @Height * @Width * @Length * @StoragePrice/*                                         
    ---------------------------------------- 
    353926.457500(所影响的行数为 1 行)
    */
      

  3.   

    精度达到要求了,但是,不知道SQLServer内部对于小数相乘是怎么计算的。哎哟,可惜结贴不能给自己加分。SELECT 9.9999 * 1.024103 * 20 * 12.00 * 12.00 * 12.00 
    GO DECLARE @DISCOUNT DECIMAL(9,4) 
    set @DISCOUNT = 9.9999 DECLARE @StoragePrice DECIMAL(7,6) 
    SET @StoragePrice = 1.024103 DECLARE @Quantity int 
    set @Quantity = 20 DECLARE @Height DECIMAL(4,2) 
    SET @Height = 12.00 DECLARE @Width DECIMAL(4,2)  
    SET @Width = 12.00 DECLARE @Length DECIMAL(4,2) 
    SET @Length = 12.00 SELECT @DISCOUNT * @Quantity * @Height * @Width * @Length * @StoragePrice
      

  4.   


    select 222*256*256*256 +187*256*256 + 255*256 + 255消息 8115,级别 16,状态 2,第 1 行
    将 expression 转换为数据类型 int 时出现算术溢出错误。declare @ip1 bigint
    declare @a1 bigint
    declare @a2 bigint
    declare @a3 bigint
    declare @a4 bigint
    set @a1=222 
    set @a2=187  
    set @a3=255 
    set @a4=255
    select @ip1 =@a1*256*256*256 + @a2*256*256 + @a3*256 + @a4
    print @ip13736862719