Pregunta

Como lo entiendo, la siguiente declaración:

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

Salidas:

1,234

lo que tiene sentido; Los ceros principales (de los cuales no hay) y cinco caracteres disponibles para los cinco caracteres que queremos enviar. Otra afirmación que entiendo es:

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

qué salidas:

00,012,345,678

de nuevo, tiene sentido dado mi comprensión de los caracteres de formato; 14 caracteres disponibles para los dígitos, comas y los principales ceros.

Lo que no entiendo es cómo:

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

puede emitir:

00,012,345,678

¿Seguramente ese es uno de los ceros principales? Seguramente debería ser:

0,012,345,678

Puedo ver que a veces se agrega un cero inicial más allá de la longitud especificada, si de lo contrario, la salida comenzaría con una coma líder, como en este ejemplo:

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

que produce

0,012,345,678

a pesar de aparentemente no reservando suficiente espacio. Pero, ¿es el ejemplo anterior un error en básico, o estoy perdiendo algo aquí?

¿Fue útil?

Solución

Parece un error.Agrega un bono que lleva cero cuando <0> y el separador de miles juegan juntos. Que <0> debe contar para 1 posición.

Se reproduce para mí en Basic 1.3 (OpenVMS 8.3) y 1.7-000 en OpenVMS 8.4. Utilicé valores de prueba más pequeños para evitar la creación de confusión / interacción con el tamaño máximo del entero de "Diez dígitos de precisión para los enteros largos" MANUAL BASIC REF.

BTW .. Buen uso de la "NNN" l.Que prevenga cualquier discusión de conversión (implícita). Movería la coma, hasta el final o el inicio de la secuencia ### para evitar implicar una posición específica.

Como una solución (pero-uggly), puede usar Format $ (Val, Format-String). Tiene el mismo problema, pero el programa obtendrá un cambio para ajustar el resultado.

$ 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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top