0
votes

Fonction pour convertir la valeur numérique en mot

Y a-t-il une fonction en cours pour convertir une valeur numérique en mot ou une autre façon de le faire? Pour l'ex-1234 -> mille deux cent trente quatre.


3 Réponses :


0
votes

non intégré, non. Vous devrez probablement écrire votre propre.


0 commentaires

2
votes

Ce sera (pas trop de tests effectués) jusqu'à 9999. Après cela, vous devrez l'élargir au travail.

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 commentaires

2
votes

J'ai creusé cela d'un coin (très) poussiéreux et j'ai mis à jour un peu: xxx


4 commentaires

Eh bien ... donc 10 000 000 est de 10 millions de milliers? Tests de l'unité Pesky. ABLDOJO.Services.Progress.com:443/#/...


Eh bien c'est embarrassant :(


Pour que cela soit encore meilleur - ce bogue est également dans le code non renvoyé et je soupçonne que cela pourrait également être dans les systèmes de production qui l'utilisent toujours.


Correction de bugs ajouté. Le bug original a été effectivement trouvé et fixé en 1994. Il a vécu pendant 6 ans avant d'être écrasé. Je suppose que le fait qu'il ait été repéré en moins d'une semaine ici montre le pouvoir de l'internet moderne :)