我把Excel里面的数据导入到数据库,有这种情况 
在Excel表中是这个数字:1535603.28
导入到s数据库中却是这个数字:1535603.00
左边的是Excel表格里面的数据,右边的是数据库里面的数据,为什么会有中间的差额0.28我数据库里面的字段类型是numeric(18,2)
有谁能讲讲numeric类型,我查看表结构是Leng都是9,然后Prec才是18,还有Scale是2,有谁能讲讲numeric类型??

解决方案 »

  1.   

    declare @t table(id numeric(18,2))
    insert into @t 
    SELECT   col1
    FROM   OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',   
                'Data Source="c:\1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[sheet1$]
    select * from @t
    /*
    id                   
    -------------------- 
    1535603.28(所影响的行数为 1 行)
    */
      

  2.   

    我导入数据库就是1535603.00
    还有好几个呢,
    前面是在Excel里面的,后面是导入到数据库里面的:
    1535603.28   1535603.00
    1725511.87   1725512.00
    2132165.72   2132166.00
    2766106.89   2766107.00
    如果说是四舍五入的情况,那么下面这两个又怎么解释呢?
    398505.24    398505.30
    434014.74    434014.80
      

  3.   

    回石头:如果是64位,excel 2007呢?
      

  4.   

    http://blog.csdn.net/chuanzhang5687/article/details/6710170
    你看一下这个。导入的时候要把数据类型改一下。numeric(18,2)
    然后注意你的excel文档里面该数据列里面有什么特殊字符没有,比如说表格左上角有没有个绿色小三角
      

  5.   

    当在 选择源表或源视图窗口的时候,选择过表,点击编辑映射,然后把类型改成你要的数据类型就好了。
    numeric(18,2)
    或者直接float类型也行。
    刚一测试,并没有出现小数点后面00的状况。
    你最好查看一下你的数据有没有问题!
      

  6.   

    谢谢提醒,我转换的时候是转换成float,然后在数据库中表的字段类型又是numeric(18,2)。这个有没有影响?
      

  7.   

    既然你数据库中是numeric(18,2)这个类型,那么导入的时候也导入这种类型吧。
    要不然万一小数点后面有三位或四位小数,那么就不会四舍五入了
      

  8.   

    那么在C#里如何定义一个numeric这种类型的变量???
      

  9.   

    是呀,问题就在这里,那么在C#里如何定义一个numeric这种类型的变量???