CString UpNum(char StrInput)
{
  switch(StrInput)
  {
  case '0':
       return("零");   //UpNum = '零';
   break;
   case '1':
       return("壹");   //UpNum = '壹';
   break;
   case '2':
       return("贰");   //UpNum = '贰';
   break;
       case '3':
       return("叁");   //UpNum = '叁';
   break;
       case '4':
       return("肆");  //UpNum = '肆';
   break;
       case '5':
       return("伍");   //UpNum = '伍';
   break;
   case '6':
       return("陆");   //UpNum = '陆';
   break;
   case '7':
       return("柒");   //UpNum = '柒';
   break;
       case '8':
       return("捌");   //UpNum = '捌';
   break;
       case '9':
       return("玖");   //UpNum = '玖';
   break;
  //default:
  }
}CString UpUnit(int IntInput, int IntFlag = 0)
{
  if (IntFlag = 0)
    switch(IntInput)
  {
  case 1:
       return("元");  //UpUnit = '元';
   break;
   case 2:
       return("拾");   //UpUnit = '拾';
   break;
   case 3:
       return("佰");   //UpUnit = '佰';
   break;
   case 4:
       return("仟");   //UpUnit = '仟';
   break;
   case 5:
       return("万");   //UpUnit = '万';
   break;
   case 6:
       return("拾");   //UpUnit = '拾';
   break;
   case 7:
       return("佰");   //UpUnit = '佰';
   break;
   case 8:
       return("仟");   //UpUnit = '仟';
   break;
   case 9:
       return("亿");   //UpUnit = '亿';
   break;
   case 10:
       return("拾");   //UpUnit = '拾';
   break;
   case 11:
       return("佰");  //UpUnit = '佰';
   break;
   case 12:
       return("仟");   //UpUnit = '仟';
   break;
      // default:
  }
  else
   switch(IntInput)
  {
  case 1:
       return("角");   //UpUnit = '角';
   break;
   case 2:
       return("分");   //UpUnit = '分';
   break;
  //default:
  }
 }CString GetUpper(CString& StrInput , int IntFlag = 0)
{
  CString StrResult;
  char StrSwap;
  int i =1;
  bool BlnOFlag =0;
  if (IntFlag == 0)   {       //整数部分的处理:处理到仟亿位
     while (i <= StrInput.GetLength())
 {
       StrSwap =(char)StrInput.GetAt(StrInput.GetLength()-i);  //(StrInput.Right(i)).Left(1);  //left(right(StrInput, i), 1);
           if ((StrSwap == '0' && i == 5) || (StrSwap == '0' && i == 9))
   {
              StrResult=UpUnit(i, 0)+UpNum(StrSwap)+StrResult;  //StrResult= strcat(strcat(UpUnit(i, 0),UpNum(StrSwap)),StrResult);
              BlnOFlag = 1;
   }
           if (StrSwap == '0' && BlnOFlag == 0)
   {
              StrResult=UpNum(StrSwap)+StrResult;  //StrResult= strcat(UpNum(StrSwap) , StrResult);
              BlnOFlag = 1;
   }
           if (StrSwap != '0')
   {
              StrResult=UpNum(StrSwap)+UpUnit(i, 0)+StrResult;  //StrResult=strcat(strcat(UpNum(StrSwap) , UpUnit(i, 0)) , StrResult);
              BlnOFlag = 0;
   }
           //ElseIf StrSwap = 0 And BlnOFlag = True Then
           i++;
 }
 return StrResult; }
  else
     while (i <= StrInput.GetLength())  //小数部分的处理
 {
           StrSwap = StrInput.GetAt(i-1);  //(StrInput.Left(i)).Right(1);  //right(left(StrInput, i), 1);
           StrResult=StrResult+UpNum(StrSwap)+ UpUnit(i, 1);   //StrResult=strcat(strcat(StrResult , UpNum(StrSwap)) , UpUnit(i, 1));
           i++;
 }
 return StrResult;
 }void DlgSwitch::OnOK() 
{
// TODO: Add extra validation here
DlgSwitch thedlgswitch;
CString StrInt;
    CString StrDim;
int i;
UpdateData(TRUE);
    if (thedlgswitch.m_moneyold.Find('.') > 0 )
{
i=thedlgswitch.m_moneyold.Find('.');
StrInt = thedlgswitch.m_moneyold.Mid(0, i);
        StrDim = thedlgswitch.m_moneyold.Mid(i,thedlgswitch.m_moneyold.GetLength()-i);
}
else
        StrInt = thedlgswitch.m_moneyold;
    if (StrDim.IsEmpty())
        thedlgswitch.m_moneynew=GetUpper(StrInt, 0);
    else
        thedlgswitch.m_moneynew=GetUpper(StrInt, 0) + GetUpper(StrDim, 1);
//thedlgswitch.m_moneynew=strcat(GetUpper(StrInt, 0) , GetUpper(StrDim, 1));
    UpdateData(FALSE);
CDialog::OnOK();
Invalidate();
}

解决方案 »

  1.   

    太复杂了,没时间看,给个我编的。
    void UpNum(char*strNew,char*strOld)
    {
      int i,t,index=0,len=strlen(strOld);  char *c1[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
      char *c2[]={"仟","佰","拾","亿","仟","佰","拾","万","仟","佰","拾","元"};
      char *c3[]={"角","分"};  for(t=0;t<len;t++){
        if(strOld[t]=='.'){
          break;
        }
      }
      index=12-t;
    strNew[0]='\0';
      for(i=0;i<t;i++,index++){
        strcat(strNew,c1[strOld[i]-0x30]);
        strcat(strNew,c2[index]);
      }
      index=0;
      for(i=t+1;i<len;i++,index++){
        strcat(strNew,c1[strOld[i]-0x30]);
        strcat(strNew,c3[index]);
      }
    }调用strNew为大写金额
    char strNew[100],strOld[100]="1234567890.24";
    UPNum(strNew,strOld);
      

  2.   

    太长了.语法没错?这句不就错了if (IntFlag = 0)
      

  3.   

    感觉到高手都不上这个网站了,没谁给我满意答复。哪位愿意给我看看源代码的,留个email。或给我发信:[email protected] ;交流于软件开发来说总是重要的。还有分呢?
      

  4.   

    if (thedlgswitch.m_moneyold.Find('.') > 0 )难道find有错,返回值为-858993460。我输入的测试数据肯定没错的。
      

  5.   

    CString turn(float fNum)
    {
    char szUpperNum[] = "零壹贰叁肆伍陆柒捌玖";
    char szNum[100];
    char szTemp[10];
    char szTempNum[100];
    CString CsReturn;sprintf(szNum,"%f",fNum);
    int nIndex = 0;do while( szNum[nIndex] != '\0')
    {
         strcpy(szTemp,szNum[nIndex],1);
         strcpy(szTempNum[nIndex*2],szUpperNum[atoi(szTemp)*2],2);
    }
    CsReturn = szTempNum;
    }
      

  6.   

    CDialog::OnOK是什么意思,你OnOK了,Invalidate还有用吗?
    你把CDialog::OnOK那行注释掉怎么样
    还有,不明白你的UpdateData(FALSE)是什么意思,你的StrDim是临时变量,它怎么才能够在对话框中显示阿?