亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
123下一頁
最近訪問板塊 發(fā)新帖
查看: 13155 | 回復(fù): 24
打印 上一主題 下一主題

求小寫的金額轉(zhuǎn)成大寫金額的程式~ [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2007-01-02 14:28 |只看該作者 |倒序?yàn)g覽
請(qǐng)高手給發(fā)一個(gè)把   小寫的金額轉(zhuǎn)成大寫金額的程式,非常感謝

如:小寫金額為。福福福.88
轉(zhuǎn)化為  大寫 捌仟捌百捌十捌點(diǎn)捌捌元

謝謝大俠~

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2007-01-02 15:14 |只看該作者
參考以下帖子應(yīng)該可以得到啟發(fā):
http://72891.cn/viewthr ... p;extra=&page=1

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2007-01-02 15:21 |只看該作者
(轉(zhuǎn))小寫金額轉(zhuǎn)換為大寫金額(C實(shí)現(xiàn))

  大多的算法都是直接分析字符串生成大寫金額,即存在一個(gè)假設(shè):源字符串的格式是正確的。在我的過程中,用狀態(tài)機(jī)的方法分析源字符串,錯(cuò)誤時(shí),返回空指針(我可不敢保證傳給我的過程的都是##.##)。 分析出源字符串中整數(shù)部有多少個(gè)數(shù)字,是否有小數(shù),統(tǒng)計(jì)結(jié)果放在一個(gè)結(jié)構(gòu)體中,整數(shù)和小數(shù)部分的數(shù)字分別放在兩個(gè)整形數(shù)組里。

  有了統(tǒng)計(jì)數(shù)據(jù)就可以生成大寫金額了。轉(zhuǎn)換過程有個(gè)難點(diǎn):要區(qū)分萬、億等“段”,特別是個(gè)位這個(gè)“段”,這個(gè)概念是在《小寫轉(zhuǎn)大寫金額在C++中的實(shí)現(xiàn)》文章中提到的。在下面的程序中用j=(size-i-1)&0x3,實(shí)際上是j=(size-i-1)%4取模,j==0時(shí)為段尾,需要特殊處理。所有的處理都是圍繞0來進(jìn)行的,也就是說,0才是難點(diǎn)。

  特殊位置的0,按段分,段中第一個(gè)非0數(shù)字前的0,可能有多個(gè);段中兩個(gè)非0數(shù)字間的0;段尾的0;個(gè)位的0;十分位,角位置的0。

  另外,轉(zhuǎn)換的一個(gè)重點(diǎn)是大寫金額的寫法,好像大多的算法都注重轉(zhuǎn)換過程而對(duì)這個(gè)問題沒有深究。我在文章后面附上轉(zhuǎn)換規(guī)則。

  有一點(diǎn),從低耦合的角度說,這個(gè)過程應(yīng)該再細(xì)分一下。輸入可以是標(biāo)準(zhǔn)格式的字符串或數(shù)字,驗(yàn)證的過程可以放到另一個(gè)模塊中。我就不再分了,總體上,while語句整體是格式分析過程,可以單獨(dú)拿出來。后面的代碼是生成大寫讀法。需要的自己處理下吧,很簡(jiǎn)單。

下面是代碼

  1. /**
  2. * @brief 將源字符串中的小寫金額轉(zhuǎn)換為大寫格式
  3. *
  4. * @param dest 目的字符串
  5. * @param src  小寫金額字符串
  6. * @return
  7. * - NULL 源字符串的格式錯(cuò)誤,返回NULL
  8. * - 非NULL 目的字符串的首地址
  9. * @note 轉(zhuǎn)換根據(jù):中國(guó)人民銀行會(huì)計(jì)司編寫的最新《企業(yè)、銀行正確辦理支付結(jié)算
  10. *       指南》的第114頁-第115頁
  11. */
  12. char* chineseFee( char* dest, char* src )
  13. {
  14.     enum
  15.     {
  16.         START,                 //開始
  17.         MINUS,                 //負(fù)號(hào)
  18.         ZEROINT,               //0整數(shù)
  19.         INTEGER,               //整數(shù)
  20.         DECIMAL,               //小數(shù)點(diǎn)
  21.         DECIMALfRACTION,       //小數(shù)位
  22.         END,                   //結(jié)束
  23.         ERROR                  //錯(cuò)誤
  24.     } status = START;

  25.     struct
  26.     {
  27.         int minus;             //0為正,1為負(fù)
  28.         int sizeInt;
  29.         int sizeDecimal;
  30.         int integer[10];
  31.         int decimal[10];
  32.     } feeInfo;

  33.     char* NumberChar[] =
  34.         { "零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖" };
  35.     char* UnitChar[] =
  36.         { "整", "圓", "拾", "佰","仟", "萬", "拾", "佰", "仟", "億",
  37.           "拾", "佰", "仟", "萬億", "拾", "佰", "仟", "億億",
  38.           "角", "分", "負(fù)", "人民幣" };
  39.          
  40.     int      i, j,size;             //循環(huán)變量
  41.     int      zeroTag        = 0,    //0標(biāo)志
  42.              decZeroTag     = 0;
  43.       
  44.     char*    pDest          = dest;
  45.     char*    pSrc           = src;
  46.    
  47.     int*     pInt           = feeInfo.integer;
  48.     int*     pDec           = feeInfo.decimal;
  49.    
  50.     //初始化
  51.     feeInfo.sizeInt        = 0;
  52.     feeInfo.sizeDecimal    = 0;
  53.     feeInfo.minus          = 0;
  54.    
  55.     //分析字符串
  56.     while( 1 )
  57.     {
  58.         switch ( *pSrc )
  59.         {
  60.             case '-' :
  61.                 status = ( status == START ) ? MINUS : ERROR;
  62.                 feeInfo.minus = ( status == MINUS ) ? 1 : 0;
  63.                 break;
  64.             case '1' :
  65.             case '2' :
  66.             case '3' :
  67.             case '4' :
  68.             case '5' :
  69.             case '6' :
  70.             case '7' :
  71.             case '8' :
  72.             case '9' :
  73.             case '0' :
  74.                 if ( *pSrc == '0' && status == ZEROINT )//|| status == START ) )
  75.                 {
  76.                     status = ERROR;
  77.                     break;
  78.                 }
  79.                 if ( status == MINUS || status == START || status == INTEGER )
  80.                 {
  81.                     if ( *pSrc == '0' && ( status == MINUS || status == START ) )
  82.                         status = ZEROINT;
  83.                     else
  84.                         status = INTEGER;
  85.                     *pInt = (*pSrc) - 48;
  86.                     ++pInt;
  87.                     ++feeInfo.sizeInt;
  88.                 }
  89.                 else if ( status == DECIMAL || status == DECIMALfRACTION )
  90.                 {
  91.                     status = DECIMALfRACTION;
  92.                     *pDec = (*pSrc) - 48;
  93.                     ++pDec;
  94.                     ++feeInfo.sizeDecimal;
  95.                 }
  96.                 else
  97.                 {
  98.                     status =ERROR;
  99.                 }
  100.                 break;
  101.             case '.' :
  102.                 status = ( status == INTEGER || status == ZEROINT )
  103.                          ? DECIMAL : ERROR;
  104.                 break;
  105.             case '' :
  106.                 status = ( status == INTEGER || status == DECIMALfRACTION
  107.                            || status == ZEROINT ) ? END : ERROR;
  108.                 break;
  109.             default :
  110.                 status = ERROR;
  111.         }
  112.         if ( status == END )
  113.             break;
  114.         else if ( status == ERROR )
  115.             return NULL;
  116.         
  117.         ++pSrc;
  118.     }
  119.    
  120.     //只有1位小數(shù)時(shí),設(shè)置百分位為0,使下面代碼不需要區(qū)分這兩種情況
  121.     if ( feeInfo.sizeDecimal == 1 )
  122.     {
  123.         feeInfo.decimal[ 1 ] = 0;
  124.         ++feeInfo.sizeDecimal;
  125.     }

  126.     //判斷是否需要打印小數(shù)部分,有小數(shù)部且十分位和百分位不都為0
  127.     //需要打印小數(shù)部時(shí),zeroTag設(shè)為0,否則設(shè)為1
  128.     if ( feeInfo.sizeDecimal == 0                                 //沒有小數(shù)
  129.         || ( !feeInfo.decimal[ 0 ] && !feeInfo.decimal[ 1 ] ) )   //小數(shù)部都為0
  130.         decZeroTag = 1;
  131.     else
  132.         decZeroTag = 0;
  133.         
  134.     //printf( "int size: %d    decimal size: %d ", feeInfo.sizeInt, feeInfo.sizeDecimal );
  135.    
  136.     strcpy( pDest, UnitChar[ 21 ] );                  //初始化目標(biāo)字符串-人民幣
  137.    
  138.     if ( feeInfo.minus ) strcat( pDest, UnitChar[ 20 ] );    //負(fù)號(hào)
  139.         
  140.     //處理整數(shù)部分
  141.     size = feeInfo.sizeInt;
  142.     for( i = 0; i < size; ++i )
  143.     {
  144.         j = size - i - 1 & 0x3;                              //j = 0時(shí)為段尾
  145.         if ( feeInfo.integer[ i ] == 0 && j )                //處理非段尾0
  146.         {
  147.             zeroTag = 1;
  148.         }
  149.         else if ( feeInfo.integer[ i ] == 0 && !j )          //處理段尾0
  150.         {
  151.             if ( feeInfo.sizeInt == 1 && decZeroTag )        //特殊處理個(gè)位0
  152.                 strcat( pDest, NumberChar[ feeInfo.integer[ i ] ] );
  153.             if ( feeInfo.sizeInt != 1 || decZeroTag )
  154.                 strcat( pDest, UnitChar[ size - i ] );
  155.             zeroTag = 0;
  156.         }
  157.         else                                                 //處理非0
  158.         {
  159.             if ( zeroTag )
  160.             {
  161.                 strcat( pDest, NumberChar[ 0 ] );
  162.                 zeroTag = 0;
  163.             }
  164.             strcat( pDest, NumberChar[ feeInfo.integer[ i ] ] );
  165.             strcat( pDest, UnitChar[ size - i ] );
  166.             if ( !j ) zeroTag = 0;                      //如果是段尾,設(shè)為非標(biāo)志
  167.         }
  168.     }
  169.    
  170.     if ( decZeroTag )
  171.     {
  172.         strcat( pDest, UnitChar[ 0 ] );//沒有小數(shù)部,打印"整"字符
  173.     }
  174.     else
  175.     {
  176.         //十分位
  177.         if ( feeInfo.decimal[ 0 ] )
  178.         {
  179.             strcat( pDest, NumberChar[ feeInfo.decimal[ 0 ] ] );
  180.             strcat( pDest, UnitChar[ 18 ] );
  181.         }
  182.         else if ( feeInfo.sizeInt != 1 || feeInfo.integer[ 0 ] )
  183.         {
  184.             strcat( pDest, NumberChar[ feeInfo.decimal[ 0 ] ] );
  185.         }
  186.         
  187.         //百分位不為0時(shí)
  188.         if ( feeInfo.decimal[ 1 ] )   
  189.         {
  190.             strcat( pDest, NumberChar[ feeInfo.decimal[ 1 ] ] );
  191.             strcat( pDest, UnitChar[ 19 ] );
  192.         }
  193.     }
  194.     return dest;
  195. }
復(fù)制代碼

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2007-01-02 16:44 |只看該作者
這應(yīng)該不是什么難題吧.

rpg實(shí)現(xiàn)起來,也應(yīng)該不是什么問題,就是麻煩。

簡(jiǎn)單說下方法,僅供參考:
1,做個(gè)tab,值是0~9的大寫,寫程序的時(shí)候,對(duì)于金額的每一位,你都要到tab里面去做
檢索,檢索到后,將tab里面的值取出。
2,然后就是區(qū)分萬,千,百位的問題了。可不可以這么考慮,你先找出小數(shù)點(diǎn)的位子,然后
確定小數(shù)點(diǎn)前面的個(gè)數(shù),然后,百,千,萬這些單位就好確定了吧。
3,剩下的任務(wù)就應(yīng)該是把每一個(gè)字符連接起來,做成字符串,這樣應(yīng)該就可以了。

說的比較泛泛,但是我覺得如果是rpg程序,這樣肯定可以實(shí)現(xiàn)。
有個(gè)命令,不知道你知道不,chckr查詢字符串的,用這個(gè)命令,可能簡(jiǎn)單些。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2007-01-02 17:03 |只看該作者
謝謝輕舟老大和樓上的那位兄弟,謝謝,剛剛接觸400,所以技術(shù)很菜


我程式有自己寫出一點(diǎn)點(diǎn)出來, 編譯也錯(cuò)了,但是就是顯示不出大寫拉,執(zhí)行之后出現(xiàn)的是亂碼,我也不知道是哪里搞錯(cuò)了,請(qǐng)朋友們幫我看一下,請(qǐng)輕舟老大和樓上的兄弟幫幫忙,謝謝你們了.程式如下:
                                 
 H                                                  1         
 FSF02F   IF  E           K        DISK                       
  FSF02FP  IF  E           K        DISK                      A
 E                    TAB01   1  10  1 0 TAB02  13            
 I*RSF02F                                                     
 I*             SUDPT                           SUDPTA        
 I            DS                                             
 I                                        1  132SUDPT         
 I                                        1   10SUDP1         
 I                                        2   20SUDP2         
 I                                        3   30SUDP3         
 I                                        4   40SUDP4         
 I                                        5   50SUDP5         
 I                                        6   60SUDP6         
 I                                        7   70SUDP7      
 I                                        8   80SUDP8
 I                                        9   90SUDP9
 I                                       10  100SUDP10
 I                                       11  110SUDP11
 I                                       12  120SUDP12
 I                                       13  130SUDP13
 I            DS                                      
 I                                        1  13 FZKK  
 I                                        1   1 FZK1  
 I                                        2   2 FZK2   
 I                                        3   3 FZK3   
 I                                        4   4 FZK4   
 I                                        5   5 FZK5   
 I                                        6   6 FZK6   
 I                                        7   7 FZK7   
 I                                        8   8 FZK8   
 I                                        9   9 FZK9   
 I                                       10  10 FZK10  
 I                                       11  11 FZK11  
 I                                       12  12 FZK12  
 I                                       13  13 FZK13  
 C                     MOVE *BLANK    FZKK   13        
 C           *LOVAL    SETLLSF02F                40   
 C           *IN40     DOWEQ'0'                        
 C                     READ SF02F                    40
 C           *IN40     IFEQ '0'                        
 C           SIVNO     CHAINRSF02FP              88   
 C           SUDP1     LOKUPTAB01     TAB02          91
 C   91                MOVE TAB02     FZK1              
 C           SUDP2     LOKUPTAB01     TAB02          91
 C   91                MOVE TAB02     FZK2              
 C           SUDP3     LOKUPTAB01     TAB02          91
 C   91                MOVE TAB02     FZK3              
 C           SUDP4     LOKUPTAB01     TAB02          91
 C   91                MOVE TAB02     FZK4              
 C           SUDP5     LOKUPTAB01     TAB02          91
 C   91                MOVE TAB02     FZK5            
 C           SUDP6     LOKUPTAB01     TAB02          91
 C   91                MOVE TAB02     FZK6            
 C           SUDP7     LOKUPTAB01     TAB02          91
 C   91                MOVE TAB02     FZK7            
 C           SUDP8     LOKUPTAB01     TAB02          91
 C   91                MOVE TAB02     FZK8            
 C           SUDP9     LOKUPTAB01     TAB02          91
 C   91                MOVE TAB02     FZK9            
 C           SUDP10    LOKUPTAB01     TAB02          91
 C   91                MOVE TAB02     FZK10            
 C           SUDP11    LOKUPTAB01     TAB02          91
 C   91                MOVE TAB02     FZK11            
 C           SUDP12    LOKUPTAB01     TAB02          91
 C   91                MOVE TAB02     FZK12            
 C           SUDP13    LOKUPTAB01     TAB02          91
 C   91                MOVE TAB02     FZK13            
 C                     MOVELSIVNO     SIVNN            
 C                     MOVELFZKK      FZK              
 C   88                WRITERSF02FP                    
 C                     ENDIF                           
 C                     ENDDO                           
 C                     SETON                     LR   
**   
**   
0 零
1 壹
2 貳
3 叁
4 肆
5 伍
6 陸
7 柒
8 捌
9 玖

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2007-01-03 08:53 |只看該作者
你可以做個(gè)關(guān)聯(lián)表試一試

0001.00      E                    TAB1    1   9  1   TAB2    2                               061230  
0002.00      C                     MOVEL'B'       AA      1                                  061219  
0003.00      C                     MOVEL*BLANK    BB      1                                  061219  
0004.00      C                     Z-ADD1         X       20                                 061219  
0005.00      C           AA        LOKUPTAB1      TAB2           90                          061230  
0012.00      C   90      TAB2      DSPLY                                                     061230  
0015.00      C                     SETON                     LR                              061214  
0016.00      C                     RETRN                                                     061214  
0017.00 ** TAB1 TAB2                                                                         061230  
0018.00 A1A                                                                                  061219  
0019.00 B2B                                                                                  061219  
0020.00 C3C                                                                                  061219  
0021.00 D4D                                                                                  061219  
0022.00 E5E                                                                                  061219  
0023.00 F6F                                                                                  061219  
0024.00 G7G                                                                                  061219  
0025.00 H8H                                                                                  061219  
0026.00 I9I

[ 本帖最后由 pantierui 于 2007-1-3 08:54 編輯 ]

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2007-01-03 13:50 |只看該作者
你把我給你的上面的代碼寫到你的程序內(nèi)
當(dāng)AA=1的時(shí)候它就等于大寫的壹
可以參見http://blog.chinaunix.net/u/20092/showart_218296.html
0001.00      E                    TAB1    1   10  1   TAB2    4                               061230  
0002.00      C                     MOVEL'1'       AA      1                                  061219  
0003.00      C                     MOVEL*BLANK    BB      1                                  061219  
0004.00      C                     Z-ADD1         X       20                                 061219  
0005.00      C           AA        LOKUPTAB1      TAB2           90                          061230  
0012.00      C   90      TAB2      DSPLY                                                     061230  
0015.00      C                     SETON                     LR                              061214  
0016.00      C                     RETRN                                                     061214  
0017.00 ** TAB1 TAB2                                                                         061230  
0018.00 0 零                                                                                  061219  
0019.00 1 壹                                                                                  061219  
0020.00 2 貳                                                                                  061219  
0021.00 3 叁                                                                                  061219  
0022.00 4 肆                                                                                  061219  
0023.00 5 伍                                                                                  061219  
0024.00 6 陸                                                                                  061219  
0025.00 7 柒                                                                                  061219  
0026.00 8 捌                                    
0026.00 9 玖

[ 本帖最后由 pantierui 于 2007-1-3 13:52 編輯 ]

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2007-01-03 16:19 |只看該作者
對(duì)不起啊,大哥,我不知道您發(fā)的程式應(yīng)該加在我程式的那里啊,而且您給我發(fā)的兩段程式是不一樣的,兩個(gè)都要嗎?


您能和我講解下嘛,麻煩您了,謝謝您~~~

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2007-01-04 15:04 |只看該作者
55555555555555,別讓他沉啊,還沒解決啊~

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2007-01-08 08:51 |只看該作者
真的很不好意思啊,這個(gè)問題我真的解決不了,所以才不停的發(fā),不停的發(fā)

現(xiàn)在上面催的很緊,請(qǐng)會(huì)的大俠們幫下忙嘛,小弟不盛感激~謝謝了~
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP