回 帖 发 新 帖 刷新版面

主题:[讨论]高手帮忙看一下这段代码

void AfxReverse(CString a)
{
    int len=a.GetLength(),halflen=len/2;
    int i=0;
    char temp=0;
    for(i=0;i<halflen;i++)
    {
        temp=a.GetAt(i);
        a.SetAt(i,a.GetAt(len-i-1));
        a.SetAt(len-i-1,temp);
    }
}

CString AfxNumToChar(double num)
{
    int temp1=num,i;
    char a;
    CString str1="",str2="";
    double temp2=num-temp1;
    for(i=1;i<=4;i++)
    {
        str2+=" ";
        a=int(temp2*10)+48;
        str2.SetAt(str2.GetLength()-1,a);
    }
    for(i=1;;i++)
    {
        if(temp1<1)
        {
            break;
        }
        else
        {
            str1+=" ";
            a=temp1%10+48;
            temp1=temp1/10;
            str1.SetAt(str1.GetLength()-1,a);
        }
    }
    str1.MakeReverse();
    return str1+'.'+str2;
}

我想实现的功能是将double型转换为字符串即CString的对象
[em2][em2]

回复列表 (共3个回复)

沙发

不用这么麻烦,有现成的库函数把double转化成字符串,包含<stdlib.h>,调用char *_gcvt( double value, int digits, char *buffer )就可以了。

Parameters

value

Value to be converted

digits

Number of significant digits stored

buffer

Storage location for result

比如 _gcvt(num,?,&str.GetAt(0));?号那里是你的num的有效数字的位数,如果不确定,给他填个大的,16或 32等等

板凳

如果你非要自己写个函数的话,那我给你提点问题,你之前应该是无法确定num的小数点后有几位数字的吧,那么你转换小数部分时,i<=4是否有点牵强
for(i=1;i<=4;i++)
    {
        str2+=" ";
        a=int(temp2*10)+48;
        str2.SetAt(str2.GetLength()-1,a);
    }
这个应该改成,
for(i=1; ;i++)
    {
        str2+=" ";
        temp2*=10;
        int integer=temp2;
        temp2-=interger;
        a=int(integer)+48;
        str2.SetAt(str2.GetLength()-1,a);
        if(integer==temp2)  //判断小数部分是否全部转成整型
          break;           
    }

3 楼

修改后的代码如下(存在精度问题,如2.356会被转换为2.3559):
CString AfxNumToChar(double num)
{
    int temp1 = num;
    int i;
    char a;
    CString str1 = "",str2 = "";
    double temp2 = num-temp1;
    for(i=1;i<=4;i++)
    {
        str2+=" ";
        a = int(temp2*=10) + 48;
        temp2 -= a - 48;
        str2.SetAt(str2.GetLength()-1,a);
    }
    for(i=1;;i++)
    {
        if(temp1<1)
        {
            break;
        }
        else
        {
            str1+=" ";
            a=temp1%10+48;
            temp1=temp1/10;
            str1.SetAt(str1.GetLength()-1,a);
        }
    }
    str1.MakeReverse();
    return str1+'.'+str2;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册