如何用一条sprintf把一个float格式化成满足以下要求的字符串:999.999999->"999"
99.9999999->"99.9"
1.11111111->"1.11"

解决方案 »

  1.   

    CString.Format——格式化为CString
    CString.left——获得指定的长度
    呵呵
      

  2.   

    当然做CString.left——获得指定的长度的字符串的时候,需要判断CString的长度先,防止出错!
      

  3.   

    如果可以的话,发到:[email protected]
    我帮你看看!注明帖子的URL!
      

  4.   

    TO: vcleaner(我没做大哥已经很久了.......) 我想在一句sprintf里面完成。例如 sprintf(szOut,"%.3g",f)这样。用你的方法还需要逐个判断是否为数字还是".",一句没法做。另外我也没用MFC
      

  5.   

    to  vcleaner(我没做大哥已经很久了.......) :
    发什么东西给你?
      

  6.   

    Double to CString including the fractional part :-
    --------------------------------------------------CString strValue,strInt, strDecimal;
    int decimal,sign;
    double dValue = 4.125;
    strValue = _fcvt(dValue,6,&decimal,&sign); // Now decimal contains 1 because there is only one digit before the .
    strInt = strValue.Left(decimal); // strInt contains 4
    strDecimal = strValue.Mid(decimal); // strDecimal contains 125CString strFinalVal;
    strFinalVal.Format("%s.%s",strInt,strDecimal); // strFinalVal contains 4.125
    Double To CString :-
    --------------------
    CString strValue;
    int decimal,sign;double dValue = 123456789101112;
    strValue = _ecvt(dValue,15,&decimal,&sign); // Converting double to string
      

  7.   

    我是要转换出来只留3位有效数字(float已经被限定为大于0小于1000了)。大部分情况用
    sprintf(szOut,"%.3g",f)是可以,不过对于f=999。99999不行,会进位,变成1e+003
      

  8.   

    這樣可以嗎
    char a[4];
    float ft = 99.999;
    sprintf(a,"%f",ft);
    a[4] = 0;
      

  9.   

    这样当然可以,但我希望是一句里面做到。另外象你那样做,还需要判断a[n]=0里面n的取值。因为对999.999,n=3,但对1.1111,n=4,总之只要3位有效数字
      

  10.   

    char a[10];
    float ft = 99.999;
    sprintf(a,"%.3f",ft);
    a[4] = 0;
      

  11.   

    double a = 33.333333; char buff[255];
    ::sprintf(buff,"%.2f",a);
      

  12.   

    double a = 999.999999;
    double b = 1.11111111;
    double c = 99.999999;
    char buff[255];
    ::sprintf(buff,"%ld",(long)a);//999.999999->"999"
    //下面两行为99.9999999->"99.9"
    ::sprintf(buff,"%f",c);//
    buff[4] = 0;
    ::sprintf(buff,"%.2f",b);//1.11111111->"1.11"
      

  13.   

    crgxw(摘下满天星) ( ) 信誉:71 
    兄弟,你这样我不是还要先判断要转换的float究竟是a类型还是b类型还是c类型???况且我需要的是一条语句。目前我用两条,这么做的:
    sprintf(szOut,"%f",f);
    szOut[f<100?4:3]=NULL;
      

  14.   

    微软帮你想好了,使用这个函数就好,很简单的,怎么用看下MSDN就知道了
    GetNumberFormat
      

  15.   

    GetNumberFormat也不好使。在
    typedef struct _numberfmt { 
      UINT      NumDigits; 
      UINT      LeadingZero; 
      UINT      Grouping; 
      LPTSTR    lpDecimalSep; 
      LPTSTR    lpThousandSep; 
      UINT      NegativeOrder; 
    } NUMBERFMT, *LPNUMBERFMT;结构中,要制定NumDigits就是小数位数。我的要求里面小数位数是不定的,我是要有效数字的大小是固定的。看看再。实在不行只好sprintf(szOut,"%f",f);szOut[f<100?4:3]=NULL;了。////////////////////////
    如果是444444.222呢?
    结果是什么?
    ///////////////////////
    我前面已经说过,浮点数的大小已经被限制在0到1000之间了。