<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      成熟穩定的數字轉換為漢字金額大寫文字函數

      在開發Grid++Report報表工具的過程中,需要一個將數字轉換為漢字金額大寫文字的函數。在網上也搜索到了一些朋友奉獻的作品,但仔細查閱之后都有一些不足。最后沒有辦法,只好綜合各方的思路再次做了重新發明輪子的事。整個函數還是比較復雜,但有Grid++Report龐大用戶群的考驗,可以保證這個轉換漢字金額大寫的函數是成熟穩定高效的。在此奉獻出來,希望能幫到需要的朋友,免除不必要的做重新發明輪子的苦差。

      代碼是用VC++寫的,如下:


      #include "stdafx.h"
      #include <string>
      #include <atlstr.h>

      using namespace std;
      using namespace ATL;

      const char Const_Str_ZeroYuan[] = "零元整";
      const char Const_Str_BigAmtNumber[] = "零壹貳叁肆伍陸柒捌玖";
      const char Const_Str_HZNegative[] = "負";
      const CString strUnit = "元拾佰仟萬拾佰仟億拾佰仟";
      const CString strNumber = Const_Str_BigAmtNumber;
      const CString strOtherUnit = "整角分";

      string ToBigMoney(double dMoney)
      {
       const double ZeroLowRange = -0.005; //-0.004449;
       const double ZeroHighRange = 0.005; //0.004449;
       if (ZeroLowRange < dMoney && dMoney < ZeroHighRange)
        return Const_Str_ZeroYuan; //"零元整";

       bool Negative = FALSE;
       if (dMoney <= ZeroLowRange)
       {
        Negative = TRUE;
        dMoney = -dMoney;
       }

       //這里沒有對超出部份作異常,使用者要注意(現實中不會出現如此巨大的金額數)
           CString strMoney;
           strMoney.Format ("%.2f" , dMoney);

           //將數字分整數部份與小數部份處理
           int nPos = strMoney.Find (".");
           int nLength = strMoney.GetLength ();
           if(nPos < 0)
               nPos = nLength;

           CString strReturnValue;
           int nCount = 0;
           bool bZero = false;
           bool bNeedLevel = false;    //對段的識別,用于是否需要出現段名,如億,萬等

           //對整數部份進行反相識別處理
           for(int i = nPos - 1;i >= 0;i --)
           {
               char ch = strMoney.GetAt (i);

        if(nCount % 4 == 0 && nCount > 0)
              {
                     //如果處理的數字為第四位(萬),或第八位(億)等,則要求置段
                    bNeedLevel = true;
              }

              if(ch == '0')
              {
         //只對拾佰仟位的0進行識別,主要考慮到拾的特殊性,即如10讀壹拾,不會讀壹拾零
         //if(nCount % 4 != 0)
         //   bZero = true;
         bZero = true; //去掉%4判斷, 讓 102000 讀做:壹拾萬零貳仟元整。9,050,155,001-〉玖拾億零伍仟零壹拾伍萬伍仟零壹元整
              }
              else
              {
                    CString strTemp(strReturnValue);
                    strReturnValue = strNumber.Mid ((ch - 0x30) * 2 , 2);

                    if(nCount > 0)
                    {
                        strReturnValue += strUnit.Mid (nCount * 2 , 2);
                        if(nCount % 4 != 0 && bNeedLevel)
                        {
                               //這里判斷是否需要讀段名,如萬,億等
                             strReturnValue += strUnit.Mid (int(nCount / 4) * 8 , 2);
                        }
                        bNeedLevel = false;
                    }

                    if(bZero)
                    {
                         //只有比當前處理的位要低中有數字才補零
                         if( !strTemp.IsEmpty () )
                             strReturnValue += strNumber.Left (2);
                         bZero = false;
                    }

                    strReturnValue += strTemp;
               }

               nCount ++;
           }

        //如果沒有整數部分,則不用加元
        if ( !strReturnValue.IsEmpty() )
        strReturnValue += strUnit.Left (2);


           //下面實現對小數點后面的處理, 先判斷是否為全零,則不需要繼續讀
           bool bAllZero = true;
           if(nPos < nLength)
           {
               if(nLength > 2)
                    nLength = 2;
               for(int i = 0;i < nLength;i ++)
                    if(strMoney.GetAt (nPos + i + 1) != '0')
                         bAllZero = false;
           }

           if(bAllZero)
           {
               strReturnValue += strOtherUnit.Left (2);
           }
           else
           {
              //對角的處理,如果沒有整數部分,則不用加上零角的零
              char ch = strMoney.GetAt (nPos + 1);
              if(ch != '0' || !strReturnValue.IsEmpty())
         strReturnValue += strNumber.Mid ((ch - 0x30) * 2 , 2);
        if(ch != '0')
         strReturnValue += strOtherUnit.Mid (1 * 2 , 2);
       
              //對分的處理,如果沒有分,角后加‘整’
              ch = strMoney.GetAt (nPos + 1 + 1);
        if(ch != '0')
        {
         strReturnValue += strNumber.Mid ((ch - 0x30) * 2 , 2);
         strReturnValue += strOtherUnit.Mid (2 * 2 , 2);
        }
        else
        {
         strReturnValue += strOtherUnit.Left (2);
        }
           }

       if (Negative)
        strReturnValue = Const_Str_HZNegative + strReturnValue;

       return string(strReturnValue);
      }

      posted on 2008-07-12 21:14  報表工具研究  閱讀(1637)  評論(1)    收藏  舉報

      導航

      主站蜘蛛池模板: 欧美熟妇xxxxx欧美老妇不卡| 人妻人人澡人人添人人爽人人玩| 色婷婷综合久久久久中文字幕| 久久精品国产亚洲av麻豆长发| 97se亚洲国产综合自在线观看| 国产精品美女免费无遮挡| 亚洲精品电影院| 少妇和邻居做不戴套视频| 国产国产午夜福利视频| 久久亚洲国产品一区二区| 老太脱裤让老头玩ⅹxxxx| 国产福利精品一区二区| 国产成人精品亚洲高清在线| 久久精品国产午夜福利伦理| 91久久国产成人免费观看| 风流少妇又紧又爽又丰满| 国产偷窥熟女高潮精品视频| 国产精品久久久久影院| 亚洲精品无amm毛片| 又色又污又爽又黄的网站| 国99久9在线 | 免费| 亚洲国产熟女一区二区三区| 精品人妻免费看一区二区三区| 久在线精品视频线观看| 久久精品国产www456c0m| 久久久www成人免费精品| 人妻中文字幕一区二区三| 国产精品午夜av福利| 任丘市| 久久AV中文综合一区二区| 乱码精品一区二区三区| 99精品国产一区二区三区2021| 久久国产自偷自偷免费一区| 国产成人高清亚洲综合| 西西人体44www大胆无码| 久草热大美女黄色片免费看| 日韩在线一区二区每天更新| 中文在线最新版天堂| 国产精品亚洲二区在线看| 国产黄色三级三级看三级| 亚洲产在线精品亚洲第一站一|