Domanda

Come lo capisco, la seguente dichiarazione:

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

Uscite:

1,234
.

che ha senso; Zeros principali (di cui non ce ne sono) e cinque caratteri disponibili per i cinque personaggi che vogliamo produrre. Un'altra dichiarazione che capisco è:

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

quali uscite:

00,012,345,678
.

Ancora una volta, ha senso dato la mia comprensione dei personaggi di formattazione; 14 caratteri disponibili per le cifre, le virgole e gli zeri principali.

Quello che non capisco è come:

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

può output:

00,012,345,678
.

Sicuramente questo è uno troppi zeri principali? Sicuramente dovrebbe essere:

0,012,345,678
.

Posso vedere che a volte uno zero leader viene aggiunto oltre la lunghezza specificata, se altrimenti l'uscita inizierà con una virgola iniziale, ad esempio in questo esempio:

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

che produce

0,012,345,678
.

Nonostante apparentemente non prenotare abbastanza spazio. Ma l'esempio precedente è un bug di base, o mi manca qualcosa qui?

È stato utile?

Soluzione

sembra un bug.Aggiunge un bonus continuo zero quando <0> e il separatore di migliaia si svolgono insieme. Che <0> dovrebbe contare per 1 posizione.

Riproduce per me in base a base 1.3 (OpenVms 8.3) e 1,7-000 su OpenVMS 8.4. Ho usato valori di prova più piccoli per evitare la creazione di confusione / interazione con la dimensione massima del numero intero di "dieci cifre di precisione per numeri interi di base" Manuale di riferimento.

btw .. buon uso della "nnn" l.Che pre-emp ogni discussione di conversione (implicita). Avrei spostato la virgola, fino alla fine o inizio della sequenza ### per evitare l'inserimento di una posizione specifica.

Come soluzione alternativa (But-UGGly), è possibile utilizzare il formato $ (VAL, FORMAT-String). Ha lo stesso problema, ma il programma otterrà un cambiamento per modificare il risultato.

$ 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
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top