CString test;
test.Format(_T("%.7f"),0)以后 test的值是随机的,为什么不是0.0000000呢?
而改成test.Format(_T("%.7f"),0.0)就行了,为什么不能用int而非要转换成float?谁能解释一下原理啊?谢谢

解决方案 »

  1.   

    我是想为什么不行?int 不可以隐式转换成float吗?
      

  2.   

    test.Format(_T("%.7f"),0)有时候是正确的,但那是随机的,郁闷
      

  3.   

    float需要有一位表示符号,是不是和这个有关?
      

  4.   

    我是在改bug非得要写个原因出来啊,我也不想这样“挑战编译器极限”
      

  5.   

    主要是float的高位低位存储的方式与int不同,所以会出错
      

  6.   

    mudunke775(竹本无心) 你好 ,能不能再详细说一下?
      

  7.   

    比如调试的时候产生了这个
    test= "675838832892320530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000"
      

  8.   

    int是32位,需要1位来存储符号;
    float也是32位,不但有一位存储符号,还需要存储小数点的位置(具体怎么存的不清楚,几位也不知道)。你的问题就是直接把int类型的32位按照float的格式去读取,所以会出问题
      

  9.   

    谢谢, 但为什么int不先隐式转换为float呢?按“%.6f”中的f转换成float,是不是像Format( __in __format_string PCXSTR pszFormat, ... )这样的函数没有隐式转换啊?
      

  10.   

    自己转换就对了
    test.Format(_T("%.7f"),(float)0)
    但就是想知道为什么不能隐式转换
      

  11.   

    可能是编译器的问题, 我在linux上用gcc编译没问题,而用vc6却有runtime error
      

  12.   

    float类型数据的存放问题 [所有相关帖子] 
    目前已知的所有的C/C++编译器都是按照IEEE制定的IEEE 浮点数表示法来进行运算的。这种结构是一种科学表示法,用符号(正或负)、指数和尾数来表示,底数被确定为2,也就是说是把一个浮点数表示为尾数乘以2的指数次方再加上符号。下面来看一下具体的float的规格:float
    共计32位,折合4字节
    由最高到最低位分别是第31、30、29、……、0位
    31位是符号位,1表示该数为负,0反之。
    30-23位,一共8位是指数位。
    22-0位,一共23位是尾数位。
    每8位分为一组,分成4组,分别是A组、B组、C组、D组。
    每一组是一个字节,在内存中逆序存储,即:DCBA
      

  13.   

    1. Format( __in __format_string PCXSTR pszFormat, ... )在实现可变参数函数时把后面的参数转化成一个链表va_list,从而不存在隐式转换,因为va_list里都是string,所以把int 当成浮点型来处理当然有问题。2. 又或者是在test.Format(_T("%.7f"),0)这种情况下有的编译器没有加载浮点库
      

  14.   

    我的是vs 2005有时候会出现问题,值有时候很大很大,别的编译器就可能不出现这种问题比如gcc
      

  15.   

    那是因为你在Format之前没有对test进行定义,在Format之前你试着给test随便赋一个值,看是否还会出现这种情况