有个计算sum(940/12*0.4+180/2*0.6)用计算器计算得85.332,而mssql计算select sum(940/12*0.4+180/2*0.6)得85.2,???不知怎么回事,想保留小数点后两位85.33,如何做?谢谢!

解决方案 »

  1.   

    cast(sum(xxxxx) as decimal(10,2))
      

  2.   

    select round(sum(940/12*0.4+180/2*0.6),2)
      

  3.   

    select cast(sum(940/12*0.4+180/2*0.6) as decimal(15,2))
      

  4.   

    谢谢!
    xuam,liangck的还是得85.2!?
     
      

  5.   

    select cast(sum(940.00/12*0.4  +180/2*0.6) as decimal(10,2))
      

  6.   

    select cast(sum(940.00/12*0.4  +180/2*0.6) as decimal(10,2))
      

  7.   

    第一个出现的值是要float才行.
    1.
    sum(cast(940 as money)/12*0.4+180/2*0.6)2.
    sum(940.0/12*0.4+180/2*0.6)
      

  8.   


    ps: 为什么要加sum……
      

  9.   

    楼主朋友,SQL在进行数字计算时,总会先去当前数字有效位数最大的一个来作为结果的最恰当近似.您给出的算是通过计算器的结果和通过SQL的结果有误差出现在2个地方,就是你给出的算是中给出最多一位小数的数字,那么SQL就默认中间结果和最终结果都近似保留1位小数,2次舍入产生了85.3333和85.2的不同结果.只要您在SQL中送入一个(且一个足够)与期望结果具有相同位数的小数就能使结果也具有这个精度,中间计算过程也保持这个精度.就像6楼仁兄的那种做法一样,但不局限与940.00,也可以是别的数字.
    如果sum函数中的几个数字是通过前台程序传入的,那么可以在传入钱在前台用一个round()函数转化一下就可以了.如果你用的开发语言没有round()这个函数,那么可以查阅一下您所用的开发语言的使用手册,相应的四舍五入函数的语法就可以了.round()函数的语法是round(四舍五入数值类型,保留位数),如果保留位数是0,那么就近似成整数.
    以上解释希望您能明白,祝楼主开心.
      

  10.   

    谢谢各位!
    特别是acupofnescafe ,讲得如此详细。
      

  11.   


    <script>
    function a(){
     alert('asdf');
    }
    </script>