存储金额的字段用什么类型? 
float decimal money 这三个类型有什么区别,各适合在什么情况下使用?

解决方案 »

  1.   

    float用于表示浮点数值数据的大致数值数据类型。浮点数据为近似值;因此,并非数据类型范围内的所有值都能精确地表示。注意:  
    real 的 ISO 同义词为 float(24)。
     
    数据类型  范围  存储  
    float 
     -1.79E + 308 至 -2.23E - 308、0 以及 2.23E - 308 至 1.79E + 308
     取决于 n 的值
     
    real 
     -3.40E + 38 至 -1.18E - 38、0 以及 1.18E - 38 至 3.40E + 38
     4 字节
     decimal带固定精度和小数位数的数值数据类型。decimal[ (p[ , s] )] 和 numeric[ (p[ , s] )]
    固定精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。decimal 的 ISO 同义词为 dec 和 dec(p, s)。numeric 在功能上等价于 decimal。p(精度)
    最多可以存储的十进制数字的总位数,包括小数点左边和右边的位数。该精度必须是从 1 到最大精度 38 之间的值。默认精度为 18。s (小数位数)
    小数点右边可以存储的十进制数字的最大位数。小数位数必须是从 0 到 p 之间的值。仅在指定精度后才可以指定小数位数。默认的小数位数为 0;因此,0 <= s <= p。最大存储大小基于精度而变化。
    money表货币或货币值的数据类型。数据类型  范围  存储  
    money 
     -922,337,203,685,477.5808 到 922,337,203,685,477.5807
     8 字节
     
    smallmoney 
     -214,748.3648 到 214,748.3647
     4 字节
     
      

  2.   

    根据要求精确度决定..4位小数时用money,要求高精确度时用numeric/decimal
      

  3.   

    money小数位数少,但对金额常用,因为金额最小就是分,它有效地利用了数据空间及实际情况,但有的情况下用money并不一定合适,例如,数量比较大,金额又比较小,要算单价,则用money误差较大,这时往往改用decimal或float,
    decimal精度比float高,数据处理比float简单,一般优先考虑,但float存储的数据范围大,所以范围大的数据就只能用它了,但要注意一些处理细节,因为不精确可能会与自己想的不一致,论坛上也常有关于float 出错的问题。