Имя: Пароль:
1C
1С v8
Как прочитать цифры в числе
,
0 Никулин Леонид
 
19.06.12
11:21
Подскажите как прчитать цифры в числе по одной и с конца? Например число 12345. Чтоб я получил 5, потом 4, потом 3, потом...
Спасибо
1 Нуф-Нуф
 
19.06.12
11:22
сред спасет отца русской демократии
2 Cube
 
19.06.12
11:22
(0) Нужно себя как-то заставить...
Кури Лев(), Прав(), Сред()...
3 Никулин Леонид
 
19.06.12
11:24
Разобрался
4 vasilii85
 
19.06.12
11:26
А, зачем спрашивал?
5 х86
 
19.06.12
11:31
(0)  /10 /100 /100 + Цел()
6 andrewks
 
19.06.12
11:31
(1)(2)  ламеры. % + Цел надо юзать
7 Cube
 
19.06.12
11:33
(6) Не обоснованное заявление.
8 andrewks
 
19.06.12
11:34
(7) ему нужно _цифры_ в _числе_. если вы предлагаете излишнее преобразование типов делать сначала в одну сторону, а потом назад, то это тоже некошерно
9 zak555
 
19.06.12
11:34
(6) а если это нецелое число ?
10 andrewks
 
19.06.12
11:43
(9) и этот случай тоже можно обработать
11 Cube
 
19.06.12
11:44
(8) Ещё неизвестно, что быстрее: математические операции или преобразование типов... Так что ещё не известно, какой способ производительнее....
12 zak555
 
19.06.12
11:44
(10) обработай !
=)
13 Нуф-Нуф
 
19.06.12
11:45
(6) а в глаз?
14 Нуф-Нуф
 
19.06.12
11:46
Сред()! Остальные идут лесом
15 Ненавижу 1С
 
гуру
19.06.12
11:47
(14) %10 наше всё
16 andrewks
 
19.06.12
11:49
(13) подходи
17 Serg_1960
 
19.06.12
12:01
(12) Было бы из-за чего сыр-бор городить. На, обработал :( по теме - сами дописывайте :)

   ЧислоХ = 1234.12345;
   ЦелаяЧасть = Цел(ЧислоХ);
   ДробнаяЧасть = ЧислоХ - ЦелаяЧасть;
   Для Разрядность = 0 По 15 Цикл
       Если ДробнаяЧасть = Окр(ДробнаяЧасть,Разрядность) Тогда
           Прервать;
       КонецЕсли;
   КонецЦикла;
   Сообщить(Разрядность);
18 Cube
 
19.06.12
12:28
Че-то оба варианта работают быстро, так что (6) точно не прав :)
19 Cube
 
19.06.12
12:36
Вот код, которым проверял (может, конечно, в замере времени намудрил - хз):


Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   Script = Новый COMОбъект("MSScriptControl.ScriptControl");
   Script.Language = "javascript";
   
   Для Сч = 1 По КоличествоЦиклов Цикл
       ТекстСообщения = "Шаг " + Сч + ": ";
       //Преобразование типов
       Начало = Script.eval("new Date().getTime()");
       ИсходнаяСтрока = Формат(ИсходноеЧисло, "ЧГ=");
       НомерСимвола = СтрДлина(ИсходнаяСтрока);
       Пока НомерСимвола > 0 Цикл
           ТекущаяЦифра = Число(Сред(ИсходнаяСтрока, НомерСимвола, 1));
           НомерСимвола = НомерСимвола - 1;
       КонецЦикла;
       ТекстСообщения = ТекстСообщения + (Начало - Script.eval("new Date().getTime()")) + " / ";
       //Математические операции
       Начало = Script.eval("new Date().getTime()");
       ИсходноеЧислоДляОбработки = ИсходноеЧисло;
       Пока ИсходноеЧислоДляОбработки > 0 Цикл
           ТекущаяЦифра = ИсходноеЧислоДляОбработки % 10;
           ИсходноеЧислоДляОбработки = Цел(ИсходноеЧислоДляОбработки / 10);
       КонецЦикла;
       Сообщить(ТекстСообщения + (Начало - Script.eval("new Date().getTime()")));
   КонецЦикла;
   
КонецПроцедуры //КнопкаВыполнитьНажатие()

ИсходноеЧисло        = 123456789012345678901234567890;
КоличествоЦиклов    = 20;
20 Rizhij_Nikitos
 
19.06.12
12:38
(19) Пользуйся замером производительности :)
21 Ненавижу 1С
 
гуру
19.06.12
12:42
(19) какая то хрень

КоличествоЦиклов = 20;
ИсходноеЧисло = 123456789012345678912345678901234567891234567890123456789;

Шаг 1: -1 / 0
Шаг 2: 0 / -1
Шаг 3: 0 / 0
Шаг 4: 0 / 0
Шаг 5: 0 / 0
Шаг 6: 0 / 0
Шаг 7: 0 / 0
Шаг 8: 0 / 0
Шаг 9: 0 / 0
Шаг 10: 0 / -1
Шаг 11: -1 / 0
Шаг 12: 0 / 0
Шаг 13: -1 / 0
Шаг 14: 0 / 0
Шаг 15: -1 / 0
Шаг 16: 0 / 0
Шаг 17: 0 / 0
Шаг 18: 0 / -1
Шаг 19: 0 / 0
Шаг 20: 0 / 0
22 Cube
 
19.06.12
12:44
23 Cube
 
19.06.12
12:49
+(22) Если подсчитать итоги, то:
Преобразование типов = 56,35%.
Математические операции = 42,89%.

Ну, математические операции пока лидируют :)
24 Ненавижу 1С
 
гуру
19.06.12
12:51
(22) а если немного оптимизировать?

ТекущаяЦифра = ИсходноеЧислоДляОбработки % 10;
           ИсходноеЧислоДляОбработки = (ИсходноеЧислоДляОбработки-ТекущаяЦифра) / 10;
25 Cube
 
19.06.12
12:54
(24) Тогда так:
Преобразование типов = 56,68%.
Математические операции = 43,57%.

Не оптимально?))
26 Cube
 
19.06.12
12:57
(21) Я от времени начала замера отнимал время окончания замера, а надо было наоборот. Но в любом случае, там слишком маленькая точность замера, нужно больше точность...
27 Serg_1960
 
19.06.12
13:10
(прикол) однофункциональный алгоритм :)

   ЧислоХ = 1234.56789;
   
   Пока Цел(ЧислоХ) < ЧислоХ Цикл
       ЧислоХ = ЧислоХ * 10;
   КонецЦикла;
   
   Пока Цел(ЧислоХ) > 0 Цикл
       ЧислоХ = ЧислоХ * 0.1;
       Сообщить((ЧислоХ - Цел(ЧислоХ)) * 10);
       ЧислоХ = Цел(ЧислоХ);
   КонецЦикла;