Как преобразовать строку в число 1с
Функция 1С Число(«Строка») пытается преобразовать строковое(текстовое) значение в числовое.
- Выполняем функцию 1С Число(«22»)
- 1С возвращает 22
Обратите внимание, что при неудачной попытке преобразования 1С вызывает «исключение» (ошибку).
Поэтому необходимо использовать Попытка/Исключение для отлова таких ситуаций.
Пример программного кода:
Только зарегистрированные пользователи VIP группы могут видеть этот контент.
Проголосовать за этот пост:
Как преобразовать строку в число 1с
(19) доступно и всерьез, х.ли.
чтоб ему так зарплату считали 🙂
(19) сорри:)
ЧислоСтрока=»»;
бла-бла-бла Цикл (посимвольный)
Попытка;
ЧислоСтрока = ЧислоСтрока + Строка(Число(Символ));
Исключение;
КонецПопытки;
КонецЦикла;
МоеЧисло = Число(ЧислоСтрока)
Вместо Число(символ) надо Строка(Число(символ))
в (17) как раз правильно, вот в (15) — нет
(21) Жесть.
Я продолжаю настаивать, что из строки «234ПетяВася17» число получаться не должно 🙂
Но обязательное наличие фотографии это не отменяет.
Dura lex, sed lex
(23) из строки «234ПетяВася17» получится
«2»+»3″+»4″+»1″+»7″
(25) это правильно думаешь?
Всех благодарю!! Спс!))))
+ и почему жесть?
// назначенный документу префикс
Префикс=СокрЛП(Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Получить())+ СокрЛП(Документ.Организация.Префикс);
// удаление префикса из номера документа
Если Найти(Номер, Префикс)=1 Тогда
Номер=Сред(Номер, СтрДлина(Префикс)+1);
КонецЕсли;
// в документах, перенессеных из старых редакций, может остаться «минус» впереди
Если Лев(Номер, 1) = «-» Тогда
Номер = Сред(Номер, 2);
КонецЕсли;
// удаление ведущих нулей
Пока Лев(Номер, 1)=»0″ Цикл
Номер=Сред(Номер, 2);
КонецЦикла;
[ Вопрос дня ] Как преобразовать строку в число
При переходе с платформы 1С версии 7.7 на версию 8.Х у программистов часто возникают вопросы из-за особенностей новой платформы. Иногда это касается даже самых простых функций, которые в новой версии платформы работают совершенно по-другому. С одной из таких особенностей столкнулся наш слушатель.
Вопрос
Если Число(Данные77.Уровень) = 12 Тогда КонецЕсли;
Реквизит Данные77.Уровень всегда тип «Строка». При выполнении кода выдается ошибка «Преобразование значения к типу Число не может быть выполнено». В 1С 7.7 всегда преобразовывалась строка в число. Как сделать то же самое в 8-ке?
Ответ тренера
Если параметр функции «Число» не является строковым представлением числа, система выдаст ошибку.
В синтакс-помощнике подробнее расписано:
Можно воспользоваться вот такой конструкцией:
Попытка ТекЧисло = Число(ТекстовоеПоле); Исключение ТекЧисло = 0; КонецПопытки;
Тогда если в переменной ТекстовоеПоле будет не строковое представление числа, возникнет ошибка, которую мы обработаем, например, присвоим переменной ТекЧисло значение 0.
Описание курса и примеры видео
Комментарии / обсуждение (6):
Олег Петухов
в своЁ время тоже сталкивался с ошибками преобразования строки в число. в моих случаях ошибки возникали из-за того, что:
– в строковом представлении число разделялось на триады, а в качестве символа разделения мог быть как обычный пробел (код символа 32), так и неразрывной пробел (код символа 0160);
– в строковом представлении дробная часть отделялась от целой части либо точкой, либо запятой.
если заранее известно, что в строковом представлении всегда указано только число и никаких иных символов и знаков, то преобразовать строку в число можно одной строкой, несколько раз обернув строку через функцию СтрЗаменить, например так:
Число (СтрЗаменить (СтрЗаменить (СтрЗаменить (стрЧисло, ” “, “”), ” “, “”), “,”, “.”));
где сначала в ” ” используется обычный пробел, а во втором ” ” – неразрывной пробел. примечание: в зависимости от региональных настроек базы (в конфигураторе пункт «Региональные установки информационной базы» в меню «Администрирование») или ОС (если в региональных настройках информационной базы установлена галка «Использовать региональные установки текущего сеанса») в качестве разделителя триад может выступать и запятая.
эти моменты надо заранее учесть, чтоб верно указать что и на что в строке надо заменить до преобразования строки в число.
Василий Ханевич
Спасибо за подробный и обстоятельный комментарий!
Еще есть такой вариант
ОписаниеТипа = Новый ОписаниеТипов(“Число”);
Текчисло = ОписаниеТипа.ПривестиЗначение(ТекстовоеПоле);
Василий Ханевич
Добрый день!
Да, хороший вариант.
Преимущество такого способа в том, что не вызывается исключение, когда в ТекстовоеПоле содержится не строковое представление числа.
Например:
ТекстовоеПоле = «курсы-по-1с.рф»;
ОписаниеТипа = Новый ОписаниеТипов(«Число»);
ТекЧисло = ОписаниеТипа.ПривестиЗначение(ТекстовоеПоле);
Правила преобразования значений
Если для числа не определена форматная строка, то строковым представлением числа будет его полное представление с фиксированной точкой.
Преобразование Число → Дата
Предпринимается попытка интерпретировать целую часть числа как численное представление даты. В случае ошибки будет получена пустая дата. Дате 01.01.0001 соответствует число 1721426 . Каждая добавленная единица добавляет к дате один день.
Преобразование Строка → Число
Предпринимается попытка преобразовать начальные символы даты в число. Если встречается любой символ, кроме цифры или десятичной точки, преобразование прерывается. В случае ошибки будет получен ноль.
Преобразование Строка → Дата
Предпринимается попытка преобразовать начальные символы в дату. Для этого строковое выражение должно соответствовать шаблону ‘ДД.ММ.ГГ’ или ‘ДД.ММ.ГГГГ’ . В противном случае будет получена пустая дата.
Преобразование Дата → Число
Результатом преобразования будет целочисленное представление даты.
Преобразование Дата → Строка
Результатом будет строка ‘ДД.ММ.ГГ’ или ‘ДД.ММ.ГГГГ’ , в зависимости от настроек параметров системы.
Преобразование Агрегат → Число
Результатом будет ноль
Преобразование Агрегат → Строка
Результатом будет представление объекта;
Преобразование Агрегат → Дата
Результатом будет пустая дата;
Преобразование Агрегат → Агрегат
Такое преобразование не поддерживается встроенным языком!
Явное преобразование типа
- Строка()
- Число()
- Дата()
