1. 1C / Говнокод #17076

    −123

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    Функция ПолучитьДробнуюЧасть(Число)
    	
    	Если Не ТипЗнч(Число) = Тип("Число") Тогда
    		Возврат 0;
    	КонецЕсли;
    	ЧислоСтрокой = Строка(Число);
    	Инд = 1;
    	Пока Истина Цикл
    	Символ = Сред(ЧислоСтрокой, Инд, 1);	
    	Если Символ = "" Тогда
    		Возврат 0;
    	ИначеЕсли Символ = "," Тогда
    		Если Сред(ЧислоСтрокой, Инд + 1, 1) = "" Тогда
    			Возврат 0;
    		КонецЕсли;
    		
    		Если Сред(ЧислоСтрокой, Инд + 2, 1) = "" Тогда
    			Возврат Число(Сред(ЧислоСтрокой, Инд + 1, 1));
    		КонецЕсли;
    		
    		Если Сред(ЧислоСтрокой, Инд + 3, 1) = "" Тогда
    			Возврат Число(Сред(ЧислоСтрокой, Инд + 1, 1) + Сред(ЧислоСтрокой, Инд + 2, 1));
    		Иначе
    			Возврат Число(Сред(ЧислоСтрокой, Инд + 1, 1) + Сред(ЧислоСтрокой, Инд + 2, 1) + Сред(ЧислоСтрокой, Инд + 3, 1));
    		КонецЕсли;
    	КонецЕсли;
    	Инд = Инд + 1;
    	КонецЦикла;
    КонецФункции

    Еще один "анекдот" от неизвестного автора. Предыдущий здесь: http://govnokod.ru/16639

    Запостил: Jeyrico, 07 Ноября 2014

    Комментарии (31) RSS

    • Ошибся со ссылкой - вот предыдущий: [url]http://govnokod.ru/16597[/url]
      Ответить
    • Штоб ему запуститься на машине с нерусской локализацией, где точка вместо запятой.

      А если без шуток, то товарищу надо в пятый класс (или когда там дроби проходят?)

      ---
      ps: "ТипЗнч"
      вонни!
      Ответить
    • ДробнаяЧасть = МоеЧисло - Окр(МоеЧисло,, РежимОкругления.Окр15как10);
      Ответить
      • > Окр15как10
        Хмм... 1.4 -> 1, 1.5 -> 1, 1.6 -> 2? Я привильно понял? Или это floor так обозвали?
        А какие еще режимы есть?
        Ответить
        • а ваще да, неправильно я написал.
          Ответить
        • Вот так наверн:
          ДробнаяЧасть = ?(Окр(МоеЧисло)> МоеЧисло, МоеЧисло - Окр(МоеЧисло) + 1, МоеЧисло - Окр(МоеЧисло));
          Ответить
          • А floor там нету?
            Ответить
            • неа, 15как10 и 15как20
              Ответить
              • И даже банковского округления нет (15 как 20, 25 как 20, 35 как 40, 45 как 40 и т.п.)? Как-то совсем уныло...
                Ответить
                • Через 15как10 и 15как20 можно округлять не только дробные части но и разряды целой части.

                  школьнички такие школьнички. за похапе сотку хоть платят?
                  Ответить
                  • > не только дробные части но и разряды целой части
                    Ну да, для этого у Окр есть второй параметр.

                    P.S. И что ты вообще хотел этим сказать?
                    Ответить
                    • то что "банковское округление" есть.
                      Ответить
                      • И как же его поюзать? :)

                        Походу ты неправильно понял, что такое "банковское округление".

                        На правах кэпа: Банковское округление (англ. banker's rounding) — округление для этого случая происходит к ближайшему чётному, то есть 2,5 → 2, 3,5 → 4.
                        Ответить
                        • Написать простейшую функцию ?
                          Ответить
                        • f = окр(x,0,Цел(x)%2)
                          Ответить
                          • 15как20 = 1, 15как10 = 0?
                            Ответить
                            • Да. Третий параметр Окр(<Число>, <Разрядность>, <РежимОкругления>) :

                              <РежимОкругления> (необязательный)

                              Тип: РежимОкругления.
                              Определяет режим округления. Помимо системного перечисления допускается использование числового параметра: 0 - если при округлении 1.5 = 1; 1 - если при округлении 1.5 = 2.
                              Значение по умолчанию: Окр15как20
                              Ответить
              • А зачем так дико назвали, по-школьному?
                Почему было не назвать ОкрВниз?

                Вообще какие еще есть констранты в РежимОкругления?
                Ответить
                • > Почему было не назвать ОкрВниз?
                  Потому что это не ОкрВниз. Это просто бессмысленное округление, округляющее 1.5 до 1.0, но 1.6 до 2.0.

                  15как10 и 15как20. И всё вроде как.

                  P.S. По 1с нормальная дока в инете вообще бывает? Или только покупка дисков и книжек, только хардкор?
                  Ответить
                  • Нормальная дока = синтаксис помощник в конфигураторе. Иного нетъ. А зачем доки в инет выкладывать? Вдруг конкуренты смелые синтаксические решения украдут!? Ребята из OpenERP не дремлют
                    Ответить
                    • А так, хотя бы коробочку купят...
                      Ответить
                    • пруф на хоть одну крупную российскую компанию на богом забытой openerp в которой кто то там не дрелет
                      Ответить
                      • Про сарказм когда-нибудь слыхивали?
                        Ответить
      • ДробнаяЧасть = МоеЧисло % 1;
        Ответить
        • ДробнаяЧасть = МоеЧисло - Цел(МоеЧисло );
          Ответить
          • Цел - floor?
            Ответить
            • Результат выделения целой части.
              Ответить
            • floor это ближайшее меньшее, дятел. floor(-43.7) даст -44.
              Ответить
              • > floor(-43.7) даст -44
                Я в курсе, кэп.

                Вот только твой способ один хуй толком не работает на отрицательных числах (для -3.2 вернет отрицательную дробную часть -0.2). Или так и задумывалось?
                Ответить
                • >> один хуй толком не работает на отрицательных числах

                  За отрицательным не ко мне, а к ётунам.
                  Ответить

    Добавить комментарий