DECLARE @TAX_RATE FLOAT 
SET @TAX_RATE = 1.05select -100+(840.0*(@TAX_RATE-1)/@TAX_RATE) 结果:-60
select CONVERT(INT,-100+(840*(@TAX_RATE-1)/@TAX_RATE))结果:-59上面两个计算式看起来一样,但是结果为什么不一样。请大家指点。

解决方案 »

  1.   

    颜色给弄坏了。重发一下。
    DECLARE @TAX_RATE FLOAT 
    SET @TAX_RATE = 1.05
    select -100+(840.0*(@TAX_RATE-1)/@TAX_RATE) ---->结果:-60
    select CONVERT(INT,-100+(840*(@TAX_RATE-1)/@TAX_RATE))  ---->结果:-59上面两个计算式看起来一样,但是结果为什么不一样。请大家指点。
      

  2.   

    float 类型
    计算出来应该保留小数位数的吧
    59.999int类型是忽略掉小数位的
    所以肯定是
    59
      

  3.   


    难道是SQLServer 自己算法的问题?
    我这边结果是不一样的
      

  4.   

     CONVERT向下取整,将小数部分拿掉了。
      

  5.   

    INT把小数点后面的位数扔了,LZ可以用
    select CONVERT(NUMERIC(19,0),-100+(840*(@TAX_RATE-1)/@TAX_RATE))
    或者
    select CAST(CONVERT(NUMERIC(19,6),-100+(840*(@TAX_RATE-1)/@TAX_RATE)) AS INT)
    代替
      

  6.   

    另外 我用CAST() 实验了下  也是去掉了小数点部分
      

  7.   

    DECLARE @TAX_RATE FLOAT 
    SET @TAX_RATE = 1.05select -100+(840.0*(@TAX_RATE-1)/@TAX_RATE) 的结果是不含有小数位的(小数是零),所以至于小数位是被拿掉了还是怎么了,应该没有关系吧。另外,
    select CONVERT(INT,-100+(840*(@TAX_RATE-1)/@TAX_RATE))  ---->结果:-59
    select CONVERT(NUMERIC(19,0),-100+(840*(@TAX_RATE-1)/@TAX_RATE))---->结果:-60这两个结果也不一样,奇怪。
      

  8.   

    DECLARE @TAX_RATE FLOAT 
    SET @TAX_RATE = 1.05select -100+(840.0*(@TAX_RATE-1)/@TAX_RATE)第一个前面-100是整数,加后是整数的
      

  9.   

    DECLARE @TAX_RATE FLOAT 
    SET @TAX_RATE = 1.05
    select @TAX_RATE
    select -100+(840*(@TAX_RATE-1)/@TAX_RATE)
    select CONVERT(float,-100+(840*(@TAX_RATE-1)/@TAX_RATE))  ---->结果:-59
    select CONVERT(NUMERIC(19,0),-100+(840*(@TAX_RATE-1)/@TAX_RATE))---->
                                                          
    ----------------------------------------------------- 
    1.05(所影响的行数为 1 行)                                                      
    ----------------------------------------------------- 
    -59.999999999999964(所影响的行数为 1 行)                                                      
    ----------------------------------------------------- 
    -59.999999999999964(所影响的行数为 1 行)                      
    --------------------- 
    -60(所影响的行数为 1 行)
    这样应该清楚了
      

  10.   

    我的电脑运行结果和你的不一样。跟版本有关系吗?我的是sqlServer2005。
      

  11.   

    float是浮点数,有精度损失DECLARE @TAX_RATE numeric(38,8)
    SET @TAX_RATE = 1.05
    select -100+(840.0*(@TAX_RATE-1)/@TAX_RATE) ---->结果:-60
    select CONVERT(INT,-100+(840*(@TAX_RATE-1)/@TAX_RATE))  ---->结果:-60