CString  str;
str.Format(_T("%f"),123.22); 
默认会显示123.220000
123 ->  123.00000
如何去掉0? 

解决方案 »

  1.   

    如果可以提前知道精确度,就可以使用1楼的方法如果不确定,就只好在转换后对string进行处理,从右向左去掉‘0’。^^
      

  2.   

    我是这么做的void CShareRes::FormatFloatString(CString& strFloat)
    {
    if(strFloat.Find('.')<0)
    return; int nIndex;
    char aTemp; while(true)
    {
    nIndex = strFloat.GetLength()-1;
    aTemp = strFloat.GetAt(nIndex);
    if(aTemp=='.')
    {
    strFloat.Delete(nIndex);
    break;
    }
    if(aTemp!='0')
    break;
    strFloat.Delete(nIndex);
    }
    }
      

  3.   

    str.Format(_T("%0.2f"),123.22); 控制它的小数位数
      

  4.   


    //%g只保存小数点后非零的有效数字
    str.Format(_T("%g"),123.22000); 
    AfxMessageBox(str);
      

  5.   

    楼主一定要深究的话,可以这样做:CString strFormat = _T(""); // 格式串
    int 整数位数 = 0;
    int 小数位数 = 0;
    strFormat.Format(_T("%%d.df"), 整数位数, 小数位数);CString str; // 数据串
    str.FormatstrFormat,123.22); 这样,你就可以控制你的位数了。
      

  6.   

    错了。
    楼主一定要深究的话,可以这样做:CString strFormat = _T(""); // 格式串
    int 整数位数 = 0;
    int 小数位数 = 0;
    strFormat.Format(_T("%%d.df"), 整数位数, 小数位数);CString str; // 数据串
    str.Format(strFormat,123.22);这样,你就可以控制你的位数了。
      

  7.   


    小数可以,123 就变指数了g 使用%f和%e表示中的较精确者来表示浮点数 G 同g格式,但表示为指数 
      

  8.   

    try stringstream...double dVal = 123.22;
    stringstream ss;
    ss<<dVal;
    string sVal;
    ss>>sVal;
    good luck.
      

  9.   


    如果想 从右向左 依次去掉'0'可以每次判断两个字符,例如:
    字符串 szABC[]=123.000 , 我们想规范为 123.01. 比 szABC[N] 是否为'0'2. 如果是'0',再比较 szABC[N-1] 是否为 '.'
       如果不是'0',退出3. 如果是'.',保留szABC[N]为'0',退出
       如果不是'.',说明不是有效位,删掉即可4. 返回第一步,再次循环,直到退出^^ 看问题要放开思想,从右向左并不是一次只能判断一个字符。从左向右其实也可以,用于数组中只有一个小数点,
    所以可以先找到小数点,在判断小数部分是否为零,
    如果为零,保留一个'0'
    如果不为零,删除全部的'0'^^
      

  10.   

    简单代码:char str[] = "123.000";
    int len = strlen(str);while('0'==str[len])
    {
        if('.'==str[len-1]) 
        {
            break;
        }
        else
        {
            str[len] = '\0';
        }
        len--;
    }
      

  11.   

    没有,至少我本人没见过,大多是 sprintf() 或 CString.Format().
      

  12.   

    是这样CString  str; 
    str.Format(_T("%.2f"),123.22); 
      

  13.   


    str.Format("%f",123); //这样就不行了
      

  14.   

    str.Format(_T("%g"),123.22000); AfxMessageBox(str);
      

  15.   

    double a=123.012000;
    CString str; 
    if(a==(int)a)//小数点后为0
    {
       str.Format(_T("%.0f"),a);
    }
    else
    {
       str.Format("%f",123.0000); 
       str.TrimRight("0"); 
    }
    MessageBox(str);