select 20.0/3结果是:
6.666666不想用round,能不能有一个设置修改这个默认的小数位??因为有很多个计算,一个个改很麻烦。

解决方案 »

  1.   


    select cast(20.0/3 as decimal(18,2))/*6.67*/
      

  2.   

    我的意思是,
    select 20.0/3 如果有1000行,我不想改1000次,如果有哪个地方可以修改默认的小数点长度就好。
      

  3.   

    在定义字段的时候可以有默认小数点的位数例如定义decimal(18,4) ,但是一旦设计到计算的话就无法控制。
      

  4.   


    decimal型表达式 e1(精度为 p1,小数位数为 s1)和表达式 e2(精度为 p2,小数位数为 s2),
    它们运算结果的位数有如下算法:
    运算            结果精度                            结果小数位数
    ----------------------------------------------------------------
    e1 + e2        max(s1, s2) + max(p1-s1, p2-s2) + 1            max(s1, s2)
    e1 - e2        max(s1, s2) + max(p1-s1, p2-s2) + 1            max(s1, s2)
    e1 * e2        p1 + p2 + 1                                    s1 + s2
    e1 / e2        p1 - s1 + s2 + max(6, s1 + p2 + 1)            max(6, s1 + p2 + 1)
    e1 { UNION | EXCEPT | INTERSECT } e2    max(s1, s2) + max(p1-s1, p2-s2)        max(s1, s2)在本例中,当e1/e2时,结果小数位数取 max(6,s1+p2+1),但s1+p2+1>38,所以为了不截断整数部分,系统取了6.
    这就是为什么你把总精度设得那么高,小数部分反而总是6的原因。
      

  5.   

    学习了,想请问下CAST(20.0/3 如果是CAST(20/3  为什么没有小数部分? 
      

  6.   

    对,数据库里也是,int/int 结果为int