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

    +128

    1. 1
    long.Parse(Convert.ToString(Convert.ToSingle(Item.Value.ToString())))

    Запостил: wiz, 17 Мая 2011

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

    • убейте его кто-нибудь!
      Ответить
    • а какой тип Item.Value?
      вот весело, если там long
      Ответить
      • а внутри у него неонка object.
        Ответить
        • тогда я присоединяюсь к непонимающим, зачем нужна передергивающая конвертация object->string->single->string->long вместо object->string->long.
          Ответить
          • потому что без сингла кидает exception, что число в неправильном формате.
            Ответить
            • Convert.ToLong(), не кидающий исключение, существует?
              Ответить
              • Неа. Там число может быть дробным и разделитель точка/запятая зависит от локали на сервере, что само пос ебе прекрасно.
                Ответить
                • ебе прекрасно!
                  мелкософт, как всегда, прекрасен, что бы конвертировать в строку в зависимости от локали.

                  на Java я бы сделал так:
                  long l=0;
                  try { l=Long.parseLong(String.valueOf(obj));} catch(NumberFormatException e) {Log.log(e);}
                  Ответить
                  • Ну exception то поймать не проблема. Но надо извернуться чтобы работало на всей фигне кроме совсем нечисловых значений. Сцука энтерпрайз...
                    Ответить
                    • берем самый широкий подходящий тип. Если оно в него влезает, прекрасно, если нет - ловим эксепшн и либо обламываем юзеря, либо втихую прописываем наиболее ожидаемое значение идем дальше.
                      Как иначе, я не понимаю
                      Ответить
                      • Обламывать нельзя же, могут и канделябром-с. Там в разных местах ещё эту запятую реплейсят в строке чтобы наверняка.
                        Ответить
                        • спасибо мелкософту за костыли!
                          Ответить
                        • значит юи недопилили - что там такое вводитися что так приходится парсить ?
                          Ответить
                          • Это сервера между собой обмениваются. С учётом настроек системной локали блеять. Локали могут быть (и таки бывают) разные.
                            Ответить
                            • да и хер бы сней если оно между флоат и лонгом то максимум один труексепшн и усе. Да и потом не сильно они отличабтся эти "локали блеать".
                              Ответить
                              • Дык в том-то и дело, что на входе упакованый в object стринг, в который сериализовалось значение с учётом локали.
                                Ответить
                                • протокол предачи иксмл ? я для соапа просто класс накатал который все сам проверял и выдавал
                                  Ответить
                                  • Протокол передачи тупотекст... Впрочем, недолго ему жить осталось (надеюсь) и мы свалим наконец на няшненький питончик, где такая хуйня рядом не лежала.
                                    Ответить
                                    • Правильно, сам люблю питон потомучно нанем много поточные сервера и протоколы легко пишустя. И все таки какой протокол планируете использовать (иксмл, жисон ...)
                                      Ответить
                                      • Для умеренно-сложных данных мне больше всего симпатичен JSON.

                                        Через XML легко делать запросы, но принимать его и парсить - очень муторно, селекторы-фигекторы...

                                        А вообще надо конечно пользоваться минимально-достаточной штукой. Но и не забывать думать на пару шагов вперёд. Тоесть можно тупо делать urlencode, но если есть возможность не-плоских данных, то проще сразу забиться на JSON и не трахать в будущем мозги.
                                        Ответить
                    • А потом кто-то номер телефона вместо суммы прописью впишет...
                      Ответить
                      • херня, за доп деньги можно и так организовать
                        Ответить
              • тру парсе есть же
                Ответить
    • Код говно. Вообще не понимаю, зачем всё это нужно?
      Раз уж на то пошло, и на CultureInfo насрать, то это всё делается так:
      long val = 0;
      if(long.TryParse(Item.Value.ToString(), out val)) {
        //всё ок
      }
      else {
        //введи нормальное число, падла!
      }


      А вообще, конечно же, надо использовать System.Globalization.NumberStyles и System.Globalization.CultureInfo.
      Ответить
      • глобализация?
        System.Globalization.GoldenBillion
        Ответить
        • Думаю, те программисты, что пишут такой код, не входят в Golden Billion.
          Ответить
          • Входят. Иначе бы они не планктонили в своих офисах-аквариумах выдавая такой код.
            Ответить
            • планктон - это та мелочь, которой питается крупная рыба. здесь аналогия полная
              Ответить
              • Каннибализм в среде разработчиков побежден! По крайней мере, мы держим проблему под контролем.
                Ответить
                • офисный планктон - это те люди, которые не добиваются хороших результатов. Они отдают успех(и деньги) другим
                  Ответить
    • В MSDN английским по белому написано, что обязательно следует использовать настройки глобализации при работе со строками! Анализатор кода в Студии выдаёт предупреждения, если таковых нет. Развели тут сыр-бор...
      Ответить
    • Если до упаковки в object, тип был long, то он им и остается:
      Item.Value as long? ?? default(long);
      и только так :Р
      если это string, то
      long.TryParse((string)Item.Value, out l);
      Ответить
    • показать все, что скрытоvanished
      Ответить

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