Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 15:03

Целые числы

Автор Tony Raut, 17 мар 2018, 14:14

0 Пользователей и 1 гость просматривают эту тему.

Tony Raut

Функция КоличествоЦелыхЧиселВСтроке(Строка)
   ЧислоСлов = 0;
   КоличествоЧисел = 0;
   ПолученнаяСтрока = СтрЗаменить(СокрЛП(Строка), " ", Символы.ПС);
   Для Сч = 1 ПО СтрЧислоСтрок(ПолученнаяСтрока) Цикл
      ТекСтрока = СтрПолучитьСтроку(ПолученнаяСтрока, Сч);
      Если НЕ ПустаяСтрока(ТекСтрока) Тогда
         Попытка
            Число = Число(ТекСтрока);
            //цел()
            КоличествоЧисел = КоличествоЧисел + 1;
         Исключение
         КонецПопытки;
      КонецЕсли;
   КонецЦикла;   
   Возврат КоличествоЧисел;
КонецФункции
помогите решить, через цел нужно чтобы учитывались .0 как целые, а числа типа 5.13 вообще не считались
КоличествоЧисел = КоличествоЦелыхЧиселВСтроке(" 2 3 4 0.1 5.13 1,0 ");
   Предупреждение("В строке "+КоличествоЧисел+" чисел");

oleg-x

Цитировать(" 2 3 4 0.1 5.13 1,0 ");
Разобрать на массив, разделитель пробел.
Для каждого стр из Массив Цикл
    Если СтрНайти(стр.число,".") = неопределено Тогда
        НашаЦифра = Истина;
    ИначеЕсли фПослеТочкиТолькоНули(стр.число) Тогда
        НашаЦифра = Истина;
    Иначе
        Продолжить;
    КонецЕсли;
КонецЦикла;


Функция фПослеТочкиТолькоНули(число)
    ЦелоеЧисло = Истина;
    //1) Находим точку в числе
    //2) Обходим каждую цифру в цикле после точки и проверяем условие

    Если Цифра <> 0 Тогда
        ЦелоеЧисло = Ложь;
        Прервать; //прерываем цикл
    КонецЕсли;
    Возврат ЦелоеЧисло;
КонецФункции
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Tony Raut

спасибо все ровно

AIFrame

oleg-x,
Процедура Посчитать()
СтрокаВхода = " 2 3 4 0.1 5.13 1,0 ";
Вхождений = 0;
ИНД = 0;
Пока ИНД < 10 Цикл
Вхождений = Вхождений + СтрЧислоВхождений(СтрокаВхода, " "+ИНД+" ");
Вхождений = Вхождений + СтрЧислоВхождений(СтрокаВхода, " "+ИНД+".0 ");
Вхождений = Вхождений + СтрЧислоВхождений(СтрокаВхода, " "+ИНД+",0 ");
ИНД = ИНД + 1;
КонецЦикла;
Сообщить(Вхождений);
КонецПроцедуры

Посчитать();

oleg-x

Цитата: AIFrame от 18 мар 2018, 07:17
oleg-x,
Процедура Посчитать()
СтрокаВхода = " 2 3 4 0.1 5.13 1,0 ";
Вхождений = 0;
ИНД = 0;
Пока ИНД < 10 Цикл
Вхождений = Вхождений + СтрЧислоВхождений(СтрокаВхода, " "+ИНД+" ");
Вхождений = Вхождений + СтрЧислоВхождений(СтрокаВхода, " "+ИНД+".0 ");
Вхождений = Вхождений + СтрЧислоВхождений(СтрокаВхода, " "+ИНД+",0 ");
ИНД = ИНД + 1;
КонецЦикла;
Сообщить(Вхождений);
КонецПроцедуры

Посчитать();

А если будет число 0.01?
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

AIFrame

Цитата: oleg-x от 18 мар 2018, 11:14А если будет число 0.01?
А оно целое?

oleg-x

Цитата: AIFrame от 18 мар 2018, 19:32
Цитата: oleg-x от 18 мар 2018, 11:14А если будет число 0.01?
А оно целое?
Плохой пример, вот получше
5.01
5.00
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

AIFrame

А если ты хотел сказать .00, то
Пока Найти(СтрокаВхода, ".00") > 0 Цикл
    СтрокаВхода = СтрЗаменить(СтрокаВхода, ".00", ".0");
КонецЦикла;

Добавлено: 18 мар 2018, 19:47




Процедура Посчитать()
СтрокаВхода = " 2 3 4 0.1 5.13 5.00 5,01 3.0 3 2.17 7 1,0 ";
Пока Найти(СтрокаВхода, ".00") > 0 Цикл
    СтрокаВхода = СтрЗаменить(СтрокаВхода, ".00", ".0");
КонецЦикла;
Пока Найти(СтрокаВхода, ",00") > 0 Цикл
    СтрокаВхода = СтрЗаменить(СтрокаВхода, ",00", ",0");
КонецЦикла;
Вхождений = 0;
ИНД = 0;
Пока ИНД < 10 Цикл
Вхождений = Вхождений + СтрЧислоВхождений(СтрокаВхода, " "+ИНД+" ");
Вхождений = Вхождений + СтрЧислоВхождений(СтрокаВхода, " "+ИНД+".0 ");
Вхождений = Вхождений + СтрЧислоВхождений(СтрокаВхода, " "+ИНД+",0 ");
ИНД = ИНД + 1;
КонецЦикла;
Сообщить(Вхождений);
КонецПроцедуры

Посчитать();

Попробуй.
Добавлено: 18 мар 2018, 19:50


Я не про то, что вариант с разложением в массив плох, он покрывает больше нюансов.
Я про альтернативный подход и попроще.

Теги:
Рейтинг@Mail.ru

Поиск