Question

Si je comprends bien, la déclaration suivante:

print using "<0>#,##", 1234

sorties:

1,234

ce qui a du sens; Des zéros principaux (dont il n'y en a aucun) et cinq caractères sont disponibles pour les cinq caractères que nous souhaitons produire. Une autre déclaration que je comprends est:

print using "<0>#####,#######", "12345678"L

quelles sorties:

00,012,345,678

Encore une fois, il est de sens compte tenu de ma compréhension des caractères de formatage; 14 caractères disponibles pour les chiffres, des virgules et des zéros principaux.

Ce que je ne comprends pas, c'est comment:

print using "<0>####,#######", "12345678"L

peut produire:

00,012,345,678

C'est sûrement un trop grand nombre de zéros? Il devrait sûrement être:

0,012,345,678

Je peux voir que parfois un zéro direct est ajouté sur et au-dessus de la longueur spécifiée, si, sinon la sortie commencerait par une virgule de premier plan, par exemple dans cet exemple:

print using "<0>###,#######", "12345678"L

qui produit

0,012,345,678

malgré apparemment de ne pas réserver assez d'espace. Mais est l'exemple précédent d'un bug en basique, ou je manque quelque chose ici?

Était-ce utile?

La solution

ressemble à un bug.Il ajoute un zéro avancé de bonus lorsque <0> et les milliers de séparateur jouent ensemble. Que <0> devrait compter pour 1 position.

Il se reproduit pour moi sous Basic 1.3 (openvms 8.3) et 1,7-000 sur OpenVMS 8.4. J'ai utilisé des valeurs de test plus petites pour éviter de créer une confusion / une interaction avec la taille maximale entier de "dix chiffres de précision pour les entiers longs entiers" BASIC REF Manuel.

BTW .. bonne utilisation du "NNN" l.Cela préemple toute discussion de conversion (implicite). Je déplacerais la virgule jusqu'au bout ou au début de la séquence ### pour éviter d'impliquer une position spécifique.

en tant que solution de contournement (saut-uggly), vous pouvez utiliser le format $ (Val, chaîne de format). Il a le même problème, mais le programme aura une modification pour modifier le résultat.

$ cre tmp.bas
 1      OPTION TYPE = EXPLICIT, SIZE = INTEGER LONG, CONSTANT TYPE = INTEGER
        print using "<0>###,", 1234
        print using "<0>###,", 123
        print using "<0>###,", 12
        print using "<0>###", 1234
        print using "<0>###", 123
        print using "<0>###", 12
 Exit
$ bas tmp
$ link tmp
$ run tmp
1,234
00,123
00,012
1234
0123
0012

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top