免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: sater84
打印 上一主题 下一主题

求小写的金额转成大写金额的程式~ [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-03-23 12:57 |只看该作者
谢谢楼上的!

论坛徽章:
0
22 [报告]
发表于 2009-05-18 15:35 |只看该作者
好久没来了,今天上来看了一下,发现我以前发的这个帖子在众多大侠的指导留言下竟然加精了,谢谢各位大侠们的帮助~~~
那个问题我已经解决了,我也把我写的代码发上来,大家一起讨论讨论~


H                                                  1
E                    AA         36  4               
E                    BB         36  2               
E                    TAB01   1   9  1 0 TAB01X  4   
E                    TAB02   1   3  1 0 TAB02X  4   
*  NVLU  原数值?                                    
*  RM    余数                                      
*  LV   10除的阶数                                
*  CT   ARRAY 指标                                 
C           *ENTRY    PLIST                        
C                     PARM           NVLU   100     
C                     PARM           BD1    60      
C                     CLEARAA                       
C                     Z-ADD0         RM      10     
C                     Z-ADD0         LV      10     
C                     Z-ADD0         LVQ     20     
C                     Z-ADD1         CT      30      
C                     Z-ADD0         LS      20      
C                     Z-ADD0         CT0     10      
C                     MOVE ' 整 '    AA,CT            
C                     MOVE *BLANK    BD1              
C           NVLU      DOWNE0                          
C           NVLU      DIV  10        NVLU            
C                     MVR            RM               
C                     ADD  1         LS               
C           LS        DIV  4         LVQ               
C                     MVR            LV                 
  *                                                      
C           RM        IFNE 0                           
C           LV        IFEQ 1                           
C                     EXSR FLV                          
C                     ELSE                              
C           LV        LOKUPTAB02     TAB02X         41  
C   41                ADD  1         CT                 
C   41                MOVE TAB02X    AA,CT              
C                     END                              
*                                                      
C           RM        LOKUPTAB01     TAB01X         41  
C   41                ADD  1         CT                 
C   41                MOVE TAB01X    AA,CT              
C                     ELSE                              
C           LV        IFEQ 1                           
C                     EXSR FLV                          
C                     END                       
C   62                ADD  1         CT0        
C                     END                       
C                     END                       
C                     Z-ADDCT        CJC     20
C                     DO   CT        N       20
C                     MOVE *BLANK    BC      3  
C                     MOVE AA,N      BC         
C                     MOVELBC        BB,CJC     
C                     SUB  1         CJC            
C*          'AA'      DSPLY          AA,N           
C                     END                           
C                     MOVEABB        BD     78      
C           BD        IFNE *BLANK                  
C                     MOVEL'  '      IT0E    1     (这个" "是耳朵)
C                     MOVE '  '      IT0F    1      
C                     MOVELIT0E      BD1            
C           BD1       CAT  BD:0      BD1            
C           BD1       CAT  IT0F:0    BD1               
C                     ENDIF                           
C                     SETON                     LR     
  *                                                     
CSR         FLV       BEGSR                           
C                     ADD  1         CT               
C                     SELEC                           
C           LVQ       WHEQ 0                           
C                     MOVE ' 元'    AA,CT      
C           LVQ       WHEQ 1                          
C                     MOVE ' 万 '    AA,CT            
C                     SETON                     62   
C           LVQ       WHEQ 2                          
C           CT0       COMP 4                        61
C   61                SUB  1         CT               
C                     MOVE ' 亿 '    AA,CT            
C                     ENDSL                           
C                     ENDSR               
      *                                                           
**                                                               
1 壹                                                              
2 贰                                                              
3 叁                                                              
4 肆                                                              
5 伍                                                            
6 陆                                                              
7 柒                                                                                
8 捌  
9 玖  
**   
2 拾  
3 佰  
0 仟




以上!!!
再次谢谢大侠们,谢谢~~~  :-)

论坛徽章:
0
23 [报告]
发表于 2009-05-22 00:42 |只看该作者
耳朵这个词,乃是CPT一脉相承的说法哦!我也发一个当时看了这个帖子后参考其中的一个代码改的程序,因为当时运行发现不能完全正确,就改了改,供各位参考:

     H DATEDIT(*YMD) OPTION(*SRCSTMT:*NODEBUGIO)
      *=====================================================================
     D wDigDim         S              1A   DIM(1
      *---------------------------------------------------------------------
      *中文数字
      *---------------------------------------------------------------------
     D wChnChaNbr      S             40A   INZ(X'-
     D                                     0E51840F0E59BB0F0E4C410F0E54FD0F-
     D                                     0E56610F0E57E80F0E51BC0F0E53E10F-
     D                                     0E48C50F0E4FC00F')
      *
     D wChnDim         S              4A   DIM(10)
      *---------------------------------------------------------------------
      *中文单位
      *---------------------------------------------------------------------
     D wChnChaUnt      S             72A   INZ(X'-
     D                                     0E4C760F0E4F670F0E5AB10F0E55AF0F-
     D                                     0E48DA0F0E544A0F0E57930F0E55AF0F-
     D                                     0E48DA0F0E544A0F0E59D90F0E55AF0F-
     D                                     0E48DA0F0E544A0F0E57930F0E55AF0F-
     D                                     0E48DA0F0E544A0F')
      *
     D wUntDim         S              4A   DIM(1
      *=====================================================================
     D wSfxTst         S              8A
     D yMsgRtnCod      S             10A
      *=====================================================================
     D wInpDigAmt      S             18S 0
     D wOutChrAmt      S            200A
      *
     D wInpLen         S              2S 0
     D wRpcLen         S              2S 0
     D wRpcPos         S              3S 0
      *
     D X               S              2S 0
     D Y               S              1S 0
     D Z               S              1S 0
      *---------------------------------------------------------------------
      *中文字符
      *---------------------------------------------------------------------
     D wLinLin         S              8A   INZ('零零')
     D wLinYuan        S              8A   INZ('零圆')
     D wLinWan         S              8A   INZ('零万')
     D wLinYi          S              8A   INZ('零亿')
     D wJiaoLin        S              8A   INZ('角零')
     D wJZ             S              8A   INZ('角整')
     D wYuanLin        S              8A   INZ('圆零')
     D wYZ             S              8A   INZ('圆整')
     D wYiWan          S              8A   INZ('亿万')
      *
     D wLin            S              4A   INZ('零')
     D wYuan           S              4A   INZ('圆')
     D wWan            S              4A   INZ('万')
     D wYi             S              4A   INZ('亿')
     C*
     C     *ENTRY        PLIST
     C                   PARM                    xInpDigAmt       18
     C                   PARM                    zOutChrAmt       50
     C*                  MOVE      '1001010000'  xInpDigAmt       18
     C*                  MOVE      ' '           zOutChrAmt       50
      *=====================================================================
     C                   EXSR      #InParm
      *
     C                   EXSR      #Main
      *
     C                   EXSR      #OutParm
      *
     C                   EVAL      *INLR       = *ON
     C                   RETURN
      *=====================================================================
     CSR   #Main         BEGSR
     C*检查输入
     C     ' 0123456789' CHECK     xInpDigAmt                             90
     C                   IF        *IN90       = *ON
     C                   EVAL      yMsgRtnCod  = 'FI30671'
     C                   EXSR      #ErrRtn
     C                   ENDIF
     C*
     C                   MOVE      xInpDigAmt    wInpDigAmt
     C*
     C                   SELECT
     C                   WHEN      wInpDigAmt  = *ZERO
     C                   EVAL      zOutChrAmt  = '零圆整'
     C                   ENDSL
     C*
     C                   EXSR      #IniChnInf
     CSR                 ENDSR
     C*===================================================================
     CSR   #IniChnInf    BEGSR
     C*初始化中文信息
     C                   EVAL      wInpLen     = %LEN(%TRIM(
     C                                           %CHAR(wInpDigAmt)))
     C                   MOVEA     wChnChaNbr    wChnDim
     C                   MOVEA     wChnChaUnt    wUntDim
     C*
     C                   MOVEA     xInpDigAmt    wDigDim
     C     1             DO        wInpLen       X
     C                   EVAL      Z=%DEC(wDigDim(18 - X + 1):1:0)
     C                   SELECT
     C*该位为零,为一般位
     C                   WHEN      Z= 0 AND
     C                             X<>3 AND
     C                             X<>7 AND
     C                             X<>11 AND
     C                             X<>15
     C                   EVAL      wOutChrAmt = wChnDim(Z + 1)
     C                             + %TRIM(wOutChrAmt)
     C*该位为零,为敏感位,要添零
     C                   WHEN      Z=0 AND
     C                             (X=3 OR
     C                              X=7 OR
     C                              X=11 OR
     C                              X=15)
     C                   EVAL      wOutChrAmt=wUntDim(X)
     C                             + wChnDim(Z + 1)
     C                             + %TRIM(wOutChrAmt)
     C*该位不为零
     C                   WHEN      Z<>0
     C                   EVAL      wOutChrAmt  = wChnDim(Z + 1)
     C                             + wUntDim(X)
     C                             + %TRIM(wOutChrAmt)
     C                   ENDSL
     C                   ENDDO
     C*
     C                   EXSR      #ChgSpcInf
     CSR                 ENDSR
     C*===============================================================
     CSR   #ChgSpcInf    BEGSR
     C*转换特殊情况
     C*零零->零
     C                   EVAL      wRpcPos     = %SCAN(wLinLin:wOutChrAmt)
     C                   EVAL      wRpcLen     = %SIZE(wLinLin)
     C*
     C                   DOW       wRpcPos     > *ZERO
     C                   EVAL      wOutChrAmt = %REPLACE(wLin:wOutChrAmt:
     C                                                  wRpcPos:wRpcLen)
     C                   EVAL      wRpcPos     = %SCAN(wLinLin:wOutChrAmt)
     C                   ENDDO
     C*零圆->圆
     C                   EVAL      wRpcPos     = %SCAN(wLinYuan:wOutChrAmt)
     C                   IF        wRpcPos     > *ZERO
     C                   EVAL      wOutChrAmt  = %REPLACE(wYuan:wOutChrAmt:
     C                                                  wRpcPos:wRpcLen)
     C                   ENDIF
     C*零万->零
     C                   EVAL      wRpcPos     = %SCAN(wLinWan:wOutChrAmt)
     C                   DOW       wRpcPos     > *ZERO
     C                   EVAL      wOutChrAmt  = %REPLACE(wWan:wOutChrAmt:
     C                                                 wRpcPos:wRpcLen)
     C                   EVAL      wRpcPos     = %SCAN(wLinWan:wOutChrAmt)
     C                   ENDDO
     C*零亿->亿
     C                   EVAL      wRpcPos     = %SCAN(wLinYi:wOutChrAmt)
     C                   IF        wRpcPos     > *ZERO
     C                   EVAL      wOutChrAmt  = %REPLACE(wYi:wOutChrAmt:
     C                                               wRpcPos:wRpcLen)
     C                   ENDIF
     C*角零->角整
     C                   EVAL      wRpcPos     = %SCAN(wJiaoLin:wOutChrAmt)
     C                   IF        wRpcPos     > *ZERO
     C                   EVAL      wOutChrAmt  = %REPLACE(wJZ:wOutChrAmt:
     C                                                 wRpcPos:wRpcLen)
     C                   ENDIF
     C*圆零->圆整
     C                   EVALR     wSfxTst     = %TRIM(wOutChrAmt)
     C                   IF        wSfxTst     = wYuanLin
     C                   EVALR     wOutChrAmt  = %TRIM(wOutChrAmt)
     C                   MOVE      wYZ           wOutChrAmt
     C                   EVAL      wOutChrAmt  = %TRIM(wOutChrAmt)
     C                   ENDIF
     C*亿万->亿
     C                   EVAL      wRpcPos     = %SCAN(wYiWan:wOutChrAmt)
     C                   IF        wRpcPos     > *ZERO
     C                   EVAL      wOutChrAmt  = %REPLACE(wYi:wOutChrAmt:
     C                                                wRpcPos:wRpcLen)
     C                   ENDIF
     C*去除0F0E
     C                   EVAL      wRpcPos     = %SCAN(X'0F0E':wOutChrAmt)
     C                   DOW       wRpcPos     > *ZERO
     C                   EVAL      wOutChrAmt  = %REPLACE(''  :wOutChrAmt:
     C                                                 wRpcPos:2)
     C                   EVAL      wRpcPos     = %SCAN(X'0F0E':wOutChrAmt)
     C                   ENDDO
     CSR                 ENDSR
     C*=============================================================
     CSR   #ErrRtn       BEGSR
     C                   EVAL      *INLR       = *ON
     C                   RETURN
     CSR                 ENDSR
     C*=============================================================
     CSR   #OutParm      BEGSR
     C                   EVAL      zOutChrAmt  = wOutChrAmt
     CSR                 ENDSR
     C*=============================================================
     CSR   #InParm       BEGSR
     C                   EVAL      yMsgRtnCod  = 'SUC9999'
     CSR                 ENDSR

论坛徽章:
0
24 [报告]
发表于 2009-05-26 17:33 |只看该作者
RPG IV教程第六章不就有这个例题?

论坛徽章:
0
25 [报告]
发表于 2012-04-30 20:06 |只看该作者
怎么代码里面有个小笑脸??不是解码错误吧/
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP