Глобальный контекст.СтрокаСЧислом

Методы · StringWithNumber

Формирует представление числа для определенного кода локализации и параметров числа.

Синтаксис

СтрокаСЧислом(<ИсходнаяСтрока>, <Число>, <ВидЧисловогоЗначения>, <ФорматнаяСтрокаЧисла>)

Примеры платформы

Строка = СтрокаСЧислом(";остался %1 день;;осталось %1 дня;осталось %1 дней;осталось %1 дня",
    ДнейДоНовогоГода,
    ВидЧисловогоЗначения.Количественное,
    "L=ru");
Строка = "До Нового Года " + Строка;
Полное описание, параметры и ограничения

Глобальный контекст.СтрокаСЧислом (Global context.StringWithNumber)

Глобальный контекст (Global context)

СтрокаСЧислом (StringWithNumber)

Доступен, начиная с версии 8.3.10.

Синтаксис:
СтрокаСЧислом(<ИсходнаяСтрока>, <Число>, <ВидЧисловогоЗначения>, <ФорматнаяСтрокаЧисла>)
Параметры:

<ИсходнаяСтрока> (обязательный)
Тип: Строка.
Строка, содержит перечисленные через точку с запятой 6 форм строки для каждой категории числительного:
%1 обозначает позицию числа,

порядок категорий - по возрастанию: Ноль, Один, Два, Немного, Много, Другое.
Если в данном языке какая-либо категория не используется, то форма для нее пропускается.
Для количественных:
Для русского (ru), белорусского (be) и украинского (uk) языков: "; день; ; дня; дней; дня":
день – для целых чисел, оканчивающихся на 1, но не оканчивающихся на 11;

дня – для целых чисел, оканчивающихся на 2..4, но не оканчивающихся на 12..14;

дней:
для целых чисел, оканчивающихся на 0,

для целых чисел, оканчивающихся на 5..9,

для целых чисел, оканчивающихся на 11..14;

дня – для чисел, не подходящих под предыдущие правила.

Для польского языка (pl): "; miesiąc; ; miesiące; miesięcy; miesiąca":
miesiąc – для целого числа 1;

miesiące – для целых чисел, оканчивающихся на 2..4, но не оканчивающихся на 12..14;

miesięcy:
для целых чисел, оканчивающихся на 0..1, кроме числа 1,

для целых чисел, оканчивающихся на 5..9,

для целых чисел, оканчивающихся на 12..14;

miesiąca – для чисел, не подходящих под предыдущие правила.

Для английского (en), немецкого (de), казахского (kk), болгарского (bg), грузинского (ka), турецкого (tr), азербайджанского (az), венгерского (hu), финского (fi), эстонского (et), туркменского (tk) языков: "; day; ; ; ; days":
day – для целого числа 1;

days – для чисел, не подходящих под предыдущие правила.

Для французского (fr) языка: "; jour; ; ; ; jours":
jour – для чисел, имеющих целую часть 0 или 1,

jours – для чисел, не подходящих под предыдущее правило.

Для латышского (lv) языка: "dienu; diena; ; ; ; dienas":
dienu – для целых чисел или чисел с сотыми, оканчивающимися на 0, 11~19;

diena – для чисел, оканчивающиеся на 1, но не на 11 в случае целого числа или числа с сотыми;

dienas – для чисел, не подходящих под предыдущие правила.

Для литовского (lt) языка: "; diena; ; dienos; dienos; dienų":
diena – для целых чисел, оканчивающиеся на 1, но не на 11, во всех десятичных записях;

dienos – для целых чисел, оканчивающихся на 2..9, но не на 12..19, во всех десятичных записях;

dienos – для чисел с ненулевой дробной частью;

dienų – для чисел, не подходящих под предыдущие правила.

Для румынского (ro) языка: "; zi; ; zile; ; de zile":
zi – для целого числа 1;

zile – для дробного числа или целого числа, десятки которого равны 0 или 1

de zile – для чисел, не подходящих под предыдущие правила.

Для вьетнамского (vi), китайского (zh) языков: "; ; ; ; ; ngày";
ngày – для всех чисел.

Для порядковых:
Для английского (en) языка: "; %1st day; %1nd day; %1rd day; ; %1th day":
%1st day – для чисел, оканчивающихся на 1, но не оканчивающихся на 11;

%1nd day – для чисел, оканчивающихся на 2, но не оканчивающихся на 12;

%1rd day – для чисел, оканчивающихся на 3, но не оканчивающихся на 13;

%1th day – для чисел не подходящих под предыдущие правила.

Для азербайджанского (az) языка: "; %1-ci gün; ; %1-cü döngə; %1-cı gün; %1-cu döngə":
%1-ci gün:
для чисел, оканчивающихся на 1, 2, 5, 7, 8,

для чисел, оканчивающихся на 20, 50, 70, 80;

%1-cü döngə:
для чисел, оканчивающихся на 3, 4,

для чисел, кратных 100, но не кратных 1000;

%1-cı gün:
для нуля,

для чисел, оканчивающихся на 6,

для чисел, оканчивающихся на 40, 60, 90;

%1-cu döngə – для чисел, не подходящих под предыдущие правила.

Для болгарского (bg), китайского (zh), латышского (lv), литовского (lt), немецкого (de), польского (pl), русского (ru), турецкого (tr), финского (fi), эстонского (et), белорусского (be), туркменского (tk) языков: "; ; ; ; ; %1-й день":
%1-й день – для всех чисел.

Для венгерского (hu) языка: "; %1 nap; ; ; ; %1 nap":
%1 nap – для чисел 1 и 5,

%1 nap – для чисел, не подходящих под предыдущее правило.

Для вьетнамского (vi), румынского (ro), французского (fr) языка: "; %1er jour; ; ; ; %1e jour":
%1er jour – для числа 1;

%1e jour – для чисел, не подходящих под предыдущее правило.

Для грузинского (ka) языка: "; %1-ლი; ; ; მე-%1; %1-ე":
%1-ლი – для числа 1;

მე-%1:
для нуля,

для чисел, оканчивающихся на 2..20, 40, 60, 80,

%1-ე – для чисел, не подходящих под предыдущие правила.

Для казахского (kk) языка: "; ; ; ; Мен %1-шы сыныпта оқимын; Мен %1-ші сыныпта оқимын":
Мен %1-шы сыныпта оқимын:
для чисел, оканчивающихся на 6, 9,

для чисел, оканчивающихся на 0, кроме 0;

Мен %1-ші сыныпта оқимын – для чисел, не подходящих под предыдущее правило.

Для украинского (uk) языка: "; ; ; %1-ій день; ; %1-ий день":
%1-ій день – для чисел, оканчивающихся на 3, но не оканчивающихся на 13,

%1-ий день – для чисел, не подходящих под предыдущее правило.

<Число> (обязательный)
Тип: Число.
Число, которое будет подставлено в строку вместо параметра "%1".

<ВидЧисловогоЗначения> (обязательный)
Тип: ВидЧисловогоЗначения.
Определяет вид числового значения, для которого формируется представление.

<ФорматнаяСтрокаЧисла> (необязательный)
Тип: Строка.
В качестве параметра передается строка, используемая методом Формат для преобразования исходного числа в строку в указанном формате.
Значение по умолчанию: Неопределено.
Возвращаемое значение:
Тип: Строка.
Представление строки числа в требуемой форме.
Описание:

Формирует представление числа для определенного кода локализации и параметров числа.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Пример:

// Пример вывода строки, содержащей количество дней до нового года

Строка = СтрокаСЧислом(";остался %1 день;;осталось %1 дня;осталось %1 дней;осталось %1 дня",
ДнейДоНовогоГода,
ВидЧисловогоЗначения.Количественное,
"L=ru");
Строка = "До Нового Года " + Строка;

// Результаты вычисления:

// "До Нового Года остался 1 день"

// "До Нового Года осталось 2 дня"

// "До Нового Года осталось 5 дней"

Использование в версии:

Доступен, начиная с версии 8.3.10.

Методическая информация

Практические примеры

Согласовать количество книг: 1, 2, 5, 11 и 21

СтрокаСЧислом выбирает одну из шести форм по языковым правилам. Отдельно проверяем окончания 11 и 21, которые нельзя обработать только последней цифрой.

Где и как запускать

Полный серверный общий модуль учебной базы. Собственные значения в памяти, без чтения или записи рабочих данных.

Подготовка

  1. Используйте отдельную учебную базу без рабочих данных. Создайте серверный общий модуль УчебныйЯзык с флагом Сервер, без Привилегированный.

  2. Вставьте весь модуль выбранного примера, а не одну процедуру внутрь другой. Из своей серверной команды учебной обработки вызовите УчебныйЯзык.ВыполнитьПример().

  3. Все числа, строки и коллекции созданы в самом примере. Документы, регистры, файловая система и сеть не используются; никаких зависимостей от КА2/УНФ/УТ/БП нет.

  4. Браузер показывает код, но не исполняет BSL. Проверки результата нужно выполнить вручную на платформе 8.5.1.1343 в учебной базе.

Процедура ВыполнитьПример() Экспорт
    Формы = ";%1 книга;;%1 книги;%1 книг;%1 книги";
    Числа = Новый Массив;
    Числа.Добавить(0);
    Числа.Добавить(1);
    Числа.Добавить(2);
    Числа.Добавить(5);
    Числа.Добавить(11);
    Числа.Добавить(21);
    Ожидается = Новый Массив;
    Ожидается.Добавить("0 книг");
    Ожидается.Добавить("1 книга");
    Ожидается.Добавить("2 книги");
    Ожидается.Добавить("5 книг");
    Ожидается.Добавить("11 книг");
    Ожидается.Добавить("21 книга");
    Если Числа.Количество() <> Ожидается.Количество() Тогда
        ВызватьИсключение "Учебные значения и ожидаемые подписи должны иметь одинаковый размер";
    КонецЕсли;
    Для Индекс = 0 По Числа.Количество() - 1 Цикл
        Подпись = СтрокаСЧислом(Формы, Числа[Индекс], ВидЧисловогоЗначения.Количественное, "L=ru");
        Сообщить(Подпись = Ожидается[Индекс]);
        Сообщить(Подпись);
    КонецЦикла;
КонецПроцедуры

Разбор по шагам

  1. Формы идут строго в порядке Ноль, Один, Два, Немного, Много, Другое. Пустые русские категории сохранены разделителями, не выброшены из строки.

  2. Категория Один использует книга, Немного — книги, Много — книг. %1 задаёт место числового представления.

  3. Создать шесть собственных чисел и отдельный массив ожидаемых подписей. Их одинаковый размер проверить до индексного обхода.

  4. Передать ВидЧисловогоЗначения.Количественное и L=ru: это количественный счёт книг на русском, не порядковый номер книги.

  5. Для каждого числа сравнить готовую подпись с отдельным ожиданием. 11 относится к книг, а 21 — к книга.

Как проверить результат

  1. Шесть Истина, чередующихся с 0 книг, 1 книга, 2 книги, 5 книг, 11 книг и 21 книга.

  2. Замените 2 на 12, а его ожидание на 12 книг: правило исключения 12 должно пройти. Не удаляйте пустые категории в строке Формы.

Ожидаемый результат

Функция применена к реальным подписям собственного количества и проверена на важных русских грамматических границах.

На что обратить внимание

  1. Шесть категорий — позиции формата, а не шесть последовательных числовых диапазонов.

  2. Последняя цифра 1 не всегда требует книга: число 11 — исключение.

  3. Для дробных чисел отдельно задайте ожидаемое числовое форматирование. Этот урок проверяет целые числа и не обещает универсальный вид дробного разделителя.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.