select convert(nvarchar(255),cast(cast(12345678912.12 as float) as decimal(15,2)))

解决方案 »

  1.   

    测试是对的
    Select Cast(12345678912.12 as nvarchar(20))
      

  2.   

    --你是什么数据库? 我的电脑中测试没有问题:
    select convert(nvarchar(255),12345678912.12)  --结果:
    -----------------------
    12345678912.12(所影响的行数为 1 行)
      

  3.   


        上面语句中:cast(12345678912.12 as float) 只是为了说明问题,实际上不用这个转换。
      

  4.   

    --2位小数:
    select convert(nvarchar, cast(12345678912.12 as money), 0)
    --4位小数:
    select convert(nvarchar, cast(12345678912.12 as money), 2)--只是不知道你的float转成money时会不会溢出?
    /*
    货币数据值介于 -2^63 (-922337203685477.5808) 与 2^63 - 1 (+922337203685477.5807) 之间,精确到货币单位的千分之十。存储大小为 8 个字节。
    */
      

  5.   

    不好意思  我的 12345678912.12   的数据 是在一个表中  
    其中有一个float类型的列
    12345678912.12 是这个列的一个 数据 
    select convert(nvarchar(255),matnr) from basic
    出来的数据就是
    1.23457e+010
      

  6.   

    我用的是 sql server  2000+sp3 中文版  os: xp pro 中文版
      

  7.   

    convert(nvarchar(255),convert(numeric(30,2),字段名))
      

  8.   

    --先转换成decimal,再转换成字符型就可以了.declare @a float
    set @a=12345678912.12select convert(varchar,cast(@a as decimal(20,2)))
      

  9.   

    不过这办法有局限,只能是这个列所有值的小数位固定为2位
    如果把numeric(30,2)的小数位设足够长,如numeric(30,5),那么得到的字符型数据会有多余的0,如'12345678912.12000'
      

  10.   

    问题是解决了 但是我还想知道为什么不能直接用convert(nvarchar(255),matnr)转换 而要先转换成decimal或者 numeric
      

  11.   

    高手们有没有更好的办法,关注ing
      

  12.   

    float类型与decimal、float类型数据在数据库中的存储形式不一样的
      

  13.   

    float 浮点数据,为近似值
    所以保存的数据不能够精度还原,从而导致在转换为字符型时出现这个问题.
      

  14.   

    --测试:declare @a float
    set @a=12345678912.12select @a--结果:12345678912.120001/*--从结果就可以看到,取出的数据与原来保存的数据有所偏差联机帮助上也说明了这一点:
    float 和 real
    用于表示浮点数字数据的近似数字数据类型。浮点数据为近似值;并非数据类型范围内的所有数据都能精确地表示。--*
      

  15.   

    谢谢  zjcxc(邹建)  我还有一个问题 
    这个float列 是我从excel文件中导入的 
    excel文件有一个列的内容全是数字,但是我设置成文本型 
    我希望导入sql server以后变成nvarchar类型  但是导入以后确是float类型
    请问怎么做啊
      

  16.   

    应为我有很多excel都是这样 要改工作量很大  
    请问 能不能在 sql server 读excel的时候就进行转换