Имя: Пароль:
1C
 
Разложить число 31,34 на копейки и рубли
0 buh1977
 
17.02.11
08:08
есть ли типовая функция разложить число на комейки и рубли
1 buh1977
 
17.02.11
08:08
входящий параметр - дробное число
2 Mitriy
 
17.02.11
08:09
есть функция Цел
3 birkoFFFF
 
17.02.11
08:09
а в чем собственно проблема ?
4 buh1977
 
17.02.11
08:12
надо из числа получить две строки 1 целая другая дробная части
5 Александр_
Тверь
 
17.02.11
08:13
(4) не, это невозможно, ты же понимаешь. 1С не для этого.
6 Mitriy
 
17.02.11
08:14
(4) да точно, исправлюсь: есть функция Цел
7 Rie
 
17.02.11
08:14
(4) Что тебя не устраивает в ответе (2)?
8 Mitriy
 
17.02.11
08:15
(7) чего непонятно? ему надо...
9 zak555
 
17.02.11
08:17
(0) нет
10 ДенисЧ
 
17.02.11
08:24
Я тут поковырялся в украденных СП и пришёл к выводу, что в 1с это сделать невозможно. Нужно писать внешнюю компоненту...
11 buh1977
 
17.02.11
08:26
функцией Цел я получил 0,81 -как из него получить 81
12 ДенисЧ
 
17.02.11
08:27
(11) читай (10)
13 andrewks
 
17.02.11
08:27
(11) О_О
(10) будешь теперь ВК продавать? ;-)
14 butterbean
 
17.02.11
08:29
(11) с помощью учебника по математике за 5-й класс
15 Джинн
 
17.02.11
08:30
(11) Думаю тут нужно нанять специалиста.
16 Зеленый Кот
 
17.02.11
08:30
вот и пришло молодое поколение одинэсников ;)
17 andrewks
 
17.02.11
08:30
(14) за 5-й? у меня дочка в 1-м - уже проходили
18 DrShad
 
17.02.11
08:30
(11) и как же это у тебя из 31,34 получилось 0,81?
19 aleks-id
 
17.02.11
08:30
Рубли = Цел(ТвоеЧисло);
Копейки = ТвоеЧисло-Рубли;

когда ж ламерство то прекратится...
20 Любопытная
 
17.02.11
08:31
(17) Не, по-моему все-таки в третьем
21 zak555
 
17.02.11
08:31
(18) через функцию, разложенную в ряд
22 andrewks
 
17.02.11
08:31
(16) заметь, и это ещё реформа образования не прошла
23 andrewks
 
17.02.11
08:32
(20) ты наверное про дроби. а я про умножение на 100
24 Любопытная
 
17.02.11
08:34
(23) Умножение у меня дочка в третьем классе изучать начала. А умножать на 10 и 100 еще в 5 лет умела. Но в первом классе это по-моему еще не изучали
25 DrShad
 
17.02.11
08:35
(19) вот именно когда, ведь у тебя все равно выйдет не 34 копейки а 0,34 рубля
26 zak555
 
17.02.11
08:35
умножение - второй класс
27 Любопытная
 
17.02.11
08:37
Вероятно разница в программах. Таблицу умножения нам задавали учить на лето после 1го класса, но заниматься ей мы стали в самом конце второго
28 andrewks
 
17.02.11
08:38
а задачка-то не такая тривиальная, как показалась с первого раза :-)))

Рубли = Цел(ТвоеЧисло);
Копейки = Окр(Макс(ТвоеЧисло,Рубли)-Мин(ТвоеЧисло,Рубли),2,1)*100;
29 zak555
 
17.02.11
08:39
вообще , таблицу умножения знать необязательно
30 DrShad
 
17.02.11
08:39
(28) ага точно
31 DJ Anthon
 
17.02.11
08:41
коленку предлагали?
32 zak555
 
17.02.11
08:43
(28) туда даже курс не передашь =)
33 andrewks
 
17.02.11
08:45
(31) ты свою предлагаешь? О_о
34 DJ Anthon
 
17.02.11
08:47
(28) это, по твоему нетривиально??
35 hd1
 
17.02.11
08:48
Строки же просят, а вы умножение, округление...
Сумма = "31,34";
Запятая = Лев(Сумма,1);
Пока Запятая <> "," Цикл  
   Рубли = Рубли + Лев(Сумма,1);
   Сумма = Прав(Сумма, СтрДлина(Сумма)-1);
   Запятая = Лев(Сумма,1);
КонецЦикла;
Копейки= Прав(Сумма, СтрДлина(Сумма)-1);
36 Фокусник
 
17.02.11
08:50
(28) может я еще не проснулся, но вроде как достаточно так:


Рубли = Цел(ТвоеЧисло);
Копейки = (ТвоеЧисло - Рубли) * 100;


не? :)
37 Mikeware
 
17.02.11
08:51
"количество разума на земле - константа. а население - растет..."©
38 hd1
 
17.02.11
08:52
(35) плюс надо это все упаковать в функцию, которая возвращает список значений.
39 miki
 
17.02.11
08:53
(35)сколько копеек вернет для "31,3"?
40 hd1
 
17.02.11
08:54
(39) эх, упустил, надо нулями добить до длины 2
41 andrewks
 
17.02.11
08:55
(36) "входящий параметр - дробное число"
не сказано, что оно положительное, и имеет не более 2-х знаков после запятой. а я стараюсь в меру сил делать алгоритмы устойчивые к входным данным. до кучи можно ещё забацать в начале проверку на тип значения )))
42 Ненавижу 1С
 
гуру
17.02.11
08:56
Цел() работает математически неверно, она дает:

Цел(-1.52)=-1, а правильно -2
43 Man4kin
 
17.02.11
08:57
Сумма = "31,34";
Буфер = стрЩаменить(Сумма,",",Символы.ПС);
Рубли = стрПолучитьСтроку(Буфер,1);
Копейки = стрПолучитьСтроку(Буфер,2);
44 andrewks
 
17.02.11
08:58
(42) чо то ты загнался с утра пораньше.
45 Stepa86
 
17.02.11
08:59
(28) Макс(ТвоеЧисло,Рубли) всегда равно ТвоеЧисло, потому что ТвоеЧисло >= Цел(ТвоеЧисло) (*)
Мин(ТвоеЧисло,Рубли) всегда равно Рубли, аналогично (*)
Нужно округлять или нет, это уже от задачи зависит и входных данных, вот и получаем (36)
46 Man4kin
 
17.02.11
08:59
(43) исправил
Буфер = стрЗаменитьСтроку(Сумма,",",Символы.ПС);
47 andrewks
 
17.02.11
08:59
(45) ышо адын... попей кофейку, проснись
48 Stepa86
 
17.02.11
09:00
(42) из СП "Вычисляет целую часть переданного числа, полностью отсекая дробную часть."

так что она делает ровно то, что написано в описании...
49 Stepa86
 
17.02.11
09:00
(47) пью пью
50 Волесвет
 
17.02.11
09:00
спасибо, посмеялся...
зы тож пошучу
вместо символа "," вставить перенос на следующую строку...
51 Фокусник
 
17.02.11
09:01
(41) с отрицательным числом (36) вполне справляется :)
52 Stepa86
 
17.02.11
09:03
(47) а чо не так то?
53 Фокусник
 
17.02.11
09:03
(51)+

Рубли = Цел(ВхЧисло);
Копейки = (ВхЧисло - Рубли) * 100;
                 
Сообщить("" + ВхЧисло + " = руб." + Рубли + " коп." + Копейки);


результат:


-10.15 = руб.-10 коп.-15
54 andrewks
 
17.02.11
09:05
(51) ну, если знак всего числа в копейках д.б. сохранён - то да. тут как поставят условие
55 andrewks
 
17.02.11
09:06
(52) я в (41) уже всё написал
56 mikecool
 
17.02.11
09:08
люди - пятница завтра
но все равно - спасибо за хорошее настроение ))
57 Stepa86
 
17.02.11
09:09
(55) не увидел там объяснения использования Макс( и Мин( , особенно если (42)
58 Stepa86
 
17.02.11
09:12
+(57) для работы с отр. цифрами я б вначале лучше вот так сделал, чем усложнять алгоритм:

Если пЧисло < 0 Тогда

Возврат Коллекции.СоздатьМассив( - ВыделитьРубли( - пЧисло ) , - ВыделитьКопейки( - пЧисло ) );

КонецЕсли
59 andrewks
 
17.02.11
09:13
(57) это аналог abs(), чтобы в копейках минуса не было, потому как спинным мозгом чую, результат будет использоваться для дальнейшего вывода. про (42) вообще не понял, кто что хочет сказать
60 Адинэснег
 
17.02.11
09:13
lol :-d
61 Stepa86
 
17.02.11
09:19
(59) то есть -2.49 вернет -2 рубля и 49 копеек, но если их потом сложить, то получим -1.51
62 andrewks
 
17.02.11
09:21
(61) кофе допивай уже скорее, подключай зрительный нерв
"потому как спинным мозгом чую, результат будет использоваться для дальнейшего вывода."
и будет у тебя гореть: -2 руб. -49 коп. как тебе это, нормуль?
63 NcSteel
 
17.02.11
09:23
(62) Отрицательное в топку.
64 Фокусник
 
17.02.11
09:24
(62) Это ты уже какую-то свою задачу решаешь, исходная: "разложить число на копейки и рубли" :)
65 Stepa86
 
17.02.11
09:25
(62) ну дык метод выделения и метод формирования строки нужно разделять, а не лепить все в одном месте
66 Ненавижу 1С
 
гуру
17.02.11
09:28
(48) "Вычисляет целую часть переданного числа, полностью отсекая дробную часть" - какое противоречие во фразе

В математике, целая часть вещественного числа x — округление x до ближайшего целого в меньшую сторону
wiki:Целая_часть
67 andrewks
 
17.02.11
09:28
(65) странно это услышать от тебя после (58)

ЗЫ ладно, мужики, посмеялись, и будет, арбайтен, арбайтен!
68 Stepa86
 
17.02.11
09:29
(64) исходная задача вообще "Разложить число 31,34 на копейки и рубли" - правильный ответ 31 руб. 34 коп.
69 Armando
 
17.02.11
09:30
Мордобой будет?
70 NcSteel
 
17.02.11
09:31
(69) Подходи по одному.
71 miki
 
17.02.11
09:31
добьем до 100? © SH
72 Megas
 
17.02.11
09:33
ВЫДЫХАЙ!
73 Fragster
 
гуру
17.02.11
09:34
пятница завтра же
74 Stepa86
 
17.02.11
09:35
(67) в (58) только работа с чиселками, никакого форматирования, и вообще у меня еще кофе не все...

(66) судя по описанию (ну и на самом деле) метод тупо отсекает то, что после запятой. Там НЕ сказано, что это математически верный метод, и что "округление x до ближайшего целого в меньшую сторону ". Я не спорю, что возможно правильнее бы было сделать как в вики, но метод делает ровно то, что описано в СП
75 Ненавижу 1С
 
гуру
17.02.11
09:35
(74) ну я чисто только потому что ник такой
76 lxs
 
17.02.11
09:52
"в споре рождается истина"©
77 Fragster
 
гуру
17.02.11
09:56
я таки думаю, что автору нужно почитать СП по Формат()
78 zak555
 
17.02.11
16:29
"отрицательные" рубли ещё не округляли ?
79 Aprobator
 
17.02.11
16:33
(77) озверел? Из строки рубли и копейки получать )))
80 hhhh
 
17.02.11
17:04
(79) а чего? Вроде нормально выходит.

Стр = СокрЛП(Формат(Сумма * 100, ....));
Дл = СтрДлина(Стр);
Копейки = Сред(Стр, Дл - 1);
Рубли = Лев(Стр, Дл - 2);
81 Fragster
 
гуру
17.02.11
17:07
(79) я таки подумал, что автору таки надо в конце концов строку "32 рубля 31 копейка" получить
82 zak555
 
17.02.11
17:08
(81) будет весело, если изначально автору и надо получить "пропись" =)
83 Aprobator
 
17.02.11
17:12
(82) +100500 точняк!!!
(80) фу:

Рубли = Цел(Сумма);
Копейки =( Сумма - Рубли) * 100;
84 GreyK
 
17.02.11
17:19
Пятница уже пришла? :)
85 MaxFoxxy
 
17.02.11
17:19
вот такой вариант :
// Функция "расщепляет" строку на подстроки, используя заданный
//        разделитель. Разделитель может иметь любую длину.
//        Если в качестве разделителя задан пробел, рядом стоящие пробелы
//        считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
//        игнорируются.
//        Например,
//        РазложитьСтрокуВМассивПодстрок(",ку,,,му", ",") возвратит массив значений из пяти элементов,
//        три из которых - пустые строки, а
//        РазложитьСтрокуВМассивПодстрок(" ку   му", " ") возвратит массив значений из двух элементов
//
//    Параметры:
//        Стр -            строка, которую необходимо разложить на подстроки.
//                        Параметр передается по значению.
//        Разделитель -    строка-разделитель, по умолчанию - запятая.
//
//
//    Возвращаемое значение:
//        массив значений, элементы которого - подстроки
//
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
   
   МассивСтрок = Новый Массив();
   Если Разделитель = " " Тогда
       Стр = СокрЛП(Стр);
       Пока 1=1 Цикл
           Поз = Найти(Стр,Разделитель);
           Если Поз=0 Тогда
               МассивСтрок.Добавить(Стр);
               Возврат МассивСтрок;
           КонецЕсли;
           МассивСтрок.Добавить(Лев(Стр,Поз-1));
           Стр = СокрЛ(Сред(Стр,Поз));
       КонецЦикла;
   Иначе
       ДлинаРазделителя = СтрДлина(Разделитель);
       Пока 1=1 Цикл
           Поз = Найти(Стр,Разделитель);
           Если Поз=0 Тогда
               МассивСтрок.Добавить(Стр);
               Возврат МассивСтрок;
           КонецЕсли;
           МассивСтрок.Добавить(Лев(Стр,Поз-1));
           Стр = Сред(Стр,Поз+ДлинаРазделителя);
       КонецЦикла;
   КонецЕсли;
   
КонецФункции // глРазложить






Массив = РазложитьСтрокуВМассивПодстрок(Строка(ТвоеЧисло),",");
Руб = Массив[0];
Коп = Массив[1];
86 Aprobator
 
17.02.11
17:19
(84) разминаемся )
87 ado
 
17.02.11
17:25
(37) А в 77-м что взрывалось?
88 ДенисЧ
 
17.02.11
17:30
(87)
8 января — в Москве прогремело 3 взрыва, осуществлённых армянскими националистами.
25 февраля — пожар в московской гостинице «Россия».
89 ДенисЧ
 
17.02.11
17:32
27 марта — крупнейшая за всю историю авиации катастрофа. В Тенерифе (Испания) столкнулись 2 самолёта, погибли 583 человека.
5 апреля — начало серийного производства «Нивы».
2 мая — на остановочном пункте Крыжовка произошёл наезд пассажирского поезда Гродно — Орша на пригородный электропоезд. Катастрофа в Крыжовке — самая крупная из всех, что случались когда-либо в Белорусской ССР на железной дороге.
25 мая — в кинотеатрах США начались показы фильма Звёздные Войны. Эпизод IV: Новая надежда.
21 июня — в кинотеатрах США начались показы 22-го по счёту мультфильма Уолта Диснея «Спасатели».
7 октября — принята Конституция СССР.
90 AaNnDdRrEeYy
 
17.02.11
17:51
17 февраля - найден алгоритм в 1С по разложению числа 31,34.
91 mm_84
 
17.02.11
17:59
(11) ты где учился?
92 hhhh
 
17.02.11
18:10
(83) с отрицательными затык. А в (80) всё путём.
93 Mikeware
 
17.02.11
18:13
(87)Мутации есть всегда. просто статистически в год взрыва на Маяке и в год взрыва ЧАЭС их, по понятным причинам, больше...
94 Aprobator
 
18.02.11
09:10
(92) нет там никакого затыка. Функция Цел разве знак рубит?
95 Paciffist
 
18.02.11
09:22
Идите, работайте лучше.
96 Snorkler
 
18.02.11
09:35
Пацаны, вы ничего не понимаете…
Человек в (0) спрашивает про типовую функцию для разложить на коМейки и рубли. Поэтому правильный ответ такой:

Рубли = Окр(Сумма, 0);
Комейки = 0;

.
97 DJ Anthon
 
18.02.11
16:40
(96) скомейка = 0,01 комейки
98 andrewks
 
18.02.11
16:41
(95) поработали, чё дальше делать? =)
99 Aprobator
 
18.02.11
16:43
(98) жди ЗП )
100 andrewks
 
18.02.11
16:44
(99) ))) как раз аванс сегодня уже получил! можно идти домой?
101 andrewks
 
18.02.11
16:45
+(100) тщорт, не заметил 100!