HP Basic Anomaly in Stampa usando
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?
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
.