CString str(_T("256354213.82"));
double dVal = atof(str.GetBuffer(str.GetLength());结果显示dVal = 256354213.82000000请问有什么办法可以使CString转换成double的时候,double的数据只会精确到小数点后两位?

解决方案 »

  1.   

    double的精确位数是确定的,只是显示的时候可以控制显示到哪里罢了
      

  2.   

    CString str(_T("256354213.82"));double dVal = double((int)(100 * atof(str.GetBuffer(str.GetLength())) / 100);
      

  3.   

    显示的时候用CString::Format 一下
      

  4.   

    先设置进度(setprecision等方法),再Format
      

  5.   

    cstring to double
    cstring s;
    double age =(double)atof((char *)(LPTSTR)(LPCTSTR) s); 
      

  6.   

    CString str(_T("256354213.82"));
    double dVal = atof(str.GetBuffer(str.GetLength());
    转化后
    结果显示dVal = 256354213.81999999
    在我机器上显示  256354213.81999999
      

  7.   


    你用的是UNICODE吧,把atof改成_ttof。
    LZ的问题应该并不是CString转换为double的精度问题,而是转换为double后显示的精度位数问题。即使你直接使用
    double dd = 256354213.82;
    最后得到的也是256354213.81999999(VS2010)。
    而使用 double dd = 1;   VS的监视器里的值也是1.0000000000000000,它并不表示精度就是这么多位,只是一种显示方式而已。