Вопрос

Как я понимаю, следующее утверждение:

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

Выходы:

1,234
.

что имеет смысл; Ведущие нули (из которых нет) и пять символов, доступных для пяти символов, которые мы хотим выводить. Еще одно утверждение, которое я понимаю:

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

Какие выходы:

00,012,345,678
.

снова, имеет смысл, учитывая мое понимание форматирования персонажей; 14 символов доступны для цифр, запятых и ведущих нулей.

Что я не понимаю, это как:

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

может выводить:

00,012,345,678
.

Конечно, это слишком много ведущих нулей? Конечно, должно быть:

0,012,345,678
.

Я вижу, что иногда ведущий ноль добавляется в течение и выше указанного длины, если иначе вывод начнется с ведущей запятой, такой как в этом примере:

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

Что производит

0,012,345,678
.

Несмотря на, казалось бы, не оставляя достаточно места. Но является ли предыдущим примером ошибка в основном, или я что-то упускаю здесь?

Это было полезно?

Решение

выглядит как ошибка.Он добавляет бонус ведущий ноль, когда <0> и тысячи разделитель играют вместе. Что <0> должен рассчитывать на 1 позицию.

Это воспроизводит для меня под основным 1.3 (OpenVMS 8.3) и 1,7-000 на OpenVMS 8.4. Я использовал меньшие тестовые значения, чтобы избежать создания путаницы / взаимодействия с помощью максимального целочисленного размера «десяти цифр точности для длинных целых чисел» Basic Ref Manual.

BTW. Хорошее использование «NNN» L.Что предопределяет любую (подразумеваемое) обсуждение преобразования. Я бы переместил запятую, до конца или начала последовательности ###, чтобы не подразумевать определенную позицию.

Как (ro-uggly) обходной путь, вы можете использовать формат $ (val, format-string). У него такая же проблема, но программа получит изменение, чтобы настроить результат.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top