将数值转换为单词的功能

问题描述 投票:0回答:2

是否正在执行将数字值转换为单词的函数,或者有另一种方法?对于前1234-> 1,234。

openedge progress-4gl
2个回答
1
投票

最多将完成9999(最多进行测试)。之后,您必须将其扩展才能工作。

DEFINE VARIABLE cNum2Words     AS CHARACTER NO-UNDO EXTENT 20 INITIAL ["zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eigteen","nineteen"].
DEFINE VARIABLE cTens          AS CHARACTER NO-UNDO EXTENT 10 INITIAL ["","twenty","thirty","fourty","fifty","sixty","seventy","eighty","ninety"].
DEFINE VARIABLE cPostfix       AS CHARACTER NO-UNDO EXTENT 10 INITIAL ["","","hundred","thousand","hundredthousand","million"].

FUNCTION num2word RETURN CHARACTER (INPUT piNum AS INTEGER):

    RETURN cNum2Words[piNum + 1].

END.

FUNCTION num2words RETURNS CHARACTER (INPUT piNum AS INTEGER):

    DEFINE VARIABLE iStep   AS INTEGER NO-UNDO.
    DEFINE VARIABLE cReturn AS CHARACTER NO-UNDO.
    DEFINE VARIABLE iPos    AS INTEGER NO-UNDO.          

    IF piNum >= 0 AND piNum <= 19 THEN 
        RETURN num2Word(piNum).
    ELSE DO:

        DO iStep = LENGTH(STRING(piNum)) TO 1 BY -1:  

            iPos = iPos + 1.

            IF iStep = 1 THEN DO:
                cReturn = cReturn + " " +  num2word(INTEGER(SUBSTRING(STRING(piNum), iPos, 1))).
            END.
            ELSE IF iStep = 2 THEN DO:
                cReturn =  cReturn + " " + cTens[INTEGER(SUBSTRING(STRING(piNum), iPos, 1))].
            END.
            ELSE IF iStep > 2 AND iStep <= 6 THEN DO:
                cReturn = cReturn + " " + num2word(INTEGER(SUBSTRING(STRING(piNum), iPos, 1))) + " " + cPostfix[iStep]. 
            END.

        END.                
    END.
    RETURN creturn.

END.

MESSAGE  num2words(9999) VIEW-AS ALERT-BOX .

0
投票

未内置,不。您可能需要自己编写。

© www.soinside.com 2019 - 2024. All rights reserved.