1.SQL Server中的length是指字节,不是位数2.可能是代码中有问题吧。如果数据库设置成decimal(20,2),保存1234567.65应该没有问题
你可以直接在SQL Server中操作。如果在SQL Server操作正常,就说明程序有问题。

解决方案 »

  1.   

    1. decimal是用字节保存数据,它与精度定义的关系如下:
    精度    存储字节数 
    1 - 9   5 
    10-19   9 
    20-28   13 
    29-38   17 
    2. 存储过程使用float,这个可能是导致数据有问题的原因之一,因为float是保存的非精度数据.
       另外,程序中的显示格式也会影响.
      

  2.   

    第一个问题:
    length显示13, 是因为该字段占用了13个字节的硬盘空间。-------------------------------------------------------------
    help document ;decimal 和 numeric
    带定点精度和小数位数的 numeric 数据类型。decimal[(p[, s])] 和 numeric[(p[, s])]定点精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。decimal 的 SQL-92 同义词是 dec 和 dec(p, s)。p(精度)指定小数点左边和右边可以存储的十进制数字的最大个数。精度必须是从 1 到最大精度之间的值。最大精度为 38。s(小数位数)指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 p 之间的值。默认小数位数是 0,因而 0 <= s <= p。最大存储大小基于精度而变化。
    精度         存储字节数 
    1 - 9            5 
    10-19            9 
    20-28            13 
    29-38            17 -------------------------------------------------------------------
    第2个问题:
    应该是你的字段设置不正确。
    使用以下语句 更新表结构试下(tablename 改为你的数据表名):alter table tablename alter column [precision] decimal(18,2)
      

  3.   

    多谢楼上的几位朋友,第一个问题我搞明白了~
    但是我把表结构改成decimal(20,2),存储过程中的float改成decimal,程序中也都用decimal,显示格式没有限制,但还是...1234567.65成了1234568.00(好像进步了一点-_-!)
      

  4.   

    存储过程中的float改成decimal,程序中也都用decimal
    =================================================
    必须指定小数位数,否则默认是0