在数据库中要用decimal不能用float 那在程序中呢?
要定义一个小数需要用declare @i decimal(18,4)这样吗
我试了用declare @i float 好像没影响,大家说呢?

解决方案 »

  1.   

    不要那么绝对,数据库中也可以用float
      

  2.   

    declare 的变量最好与表里的字段类型相同,这样才不会数据精度丢失,也避免不必要的类型转换
      

  3.   

    对一些精确的数据确实有影响。比如金额,可能需要精确到小数点后多少位,这时必须用decimal类型。
    这样的话,如果数据越来越多时,对金额汇总时,需要在在SQL中进行汇总,然后在前端程序中用FLOAT类型显示,误差很小。否则汇总金额的误差可能会有上百元。
      

  4.   

    意思就是把decimal的数据从数据库取出放到float变量进行计算,然后又放进数据库为decimal类型的表里,这样是否有影响?我试了好像没有影响
    declare @i float
    set @i=12.12
    print @i
    print @i*1200
    print @i*0.123
    insert into t(f) values(@i*0.123)
    select * from t
      

  5.   

    对于 decimal 和 numeric 数据类型,Microsoft® SQL Server™ 将精度和小数位数的每个特定组合看作是不同的数据类型。例如,decimal(5,5) 和 decimal(5,0) 被当作不同的数据类型。在 Transact-SQL 语句中,带有小数点的常量自动转换为 numeric 数据值,且必然使用最小的精度和小数位数。例如,常量 12.345 被转换为 numeric 值,其精度为 5,小数位为 3。从 decimal 或 numeric 向 float 或 real 转换会导致精度损失。从 int、smallint、tinyint、float、real、money 或 smallmoney 向 decimal 或 numeric 转换会导致溢出。默认情况下,在将数字转换为较低精度和小数位数的 decimal 或 numeric 值时,SQL Server 使用舍入法。然而,如果 SET ARITHABORT 选项为 ON,当发生溢出时,SQL Server 会出现错误。若仅损失精度和小数位数,则不会产生错误。float 和 real
    用于表示浮点数字数据的近似数字数据类型。浮点数据为近似值;并非数据类型范围内的所有数据都能精确地表示。语法
    float [ ( n ) ]从 - 1.79E + 308 到 1.79E + 308 之间的浮点数字数据。n 为用于存储科学记数法 float 数尾数的位数,同时指示其精度和存储大小。n 必须为从 1 到 53 之间的值。n 所在范围 精度 存储大小 
    1-24 7 位数 4 字节 
    25-53 15 位数 8 字节 
    Microsoft® SQL Server™ float[(n)] 数据类型对于从 1 到 53 之间的所有 n 值均符合 SQL-92 标准。double precision 的同义词为 float(53)。real从 ?3.40E + 38 到 3.40E + 38 之间的浮点数字数据。存储大小为 4 字节。在 SQL Server 中,real 的同义词为 float(24)。这是微软的帮助,你可以看一下啊
      

  6.   

    不要那么绝对,数据库中也可以用float  
    float 和 real 
    用于表示浮点数字数据的近似数字数据类型。浮点数据为近似值;并非数据类型范围内的所有数据都能精确地表示。decimal这个类型精确!一般选这个