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

    +108

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    if (needParce)
    {
        try
        {
            count = decimal.Parse(tb_count.Text.Replace(".", ","));
        }
        catch
        {
            count = decimal.Parse(tb_count.Text.Replace(",", "."));
        }  
    }

    Запостил: ffosbs, 16 Июня 2014

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

    • Автор верит, молния не бьет в одно и то же место дважды
      Ответить
      • Дык места разные! Читай внимательней ;)
        Ответить
        • Да я видел что места разные, убежал-то недалеко
          Ответить
          • Это откат изменений видимо)

            ан нет. просто автор не вспомнил и решил сделать так сказать "условную компиляцию"
            Ответить
    • ffosbs а как needParce получает значение ;) думаю там тоже весело
      Ответить
    • А если ни точки ни запятой нет в тексте, который пытаются парсить? Где же еще один трай-кетч. (*lots of sarcasm*)
      Ответить
      • А если их нету - то или оба прокатят, или оба не прокатят ;)
        Ответить
        • string str = "1 0";
          double dd = double.Parse(str.Replace(".",","));

          Интересный результат, на самом деле выходит, получается что replace не даст никакого эффекта, если он не находит искомую подстроку или символ для замены, а при вызове double.Parse, видимо, происходит Trim входной строки и в итоге 1 0 превращается в 10 и dd = 10.0. Хитрый майкрософт. Ошибка просто проглатывается, фактически.
          Ответить
          • Ну и тогда это все наводит вот еще на какие мысли, что try catch в выше приведенном примере никогда и не сработает, ну кроме тех случаев когда во входной строке присутствуют всякие лишние символы, не характерные для double, : ; и тд
            При этом
            string str1 = "1,0";
            string str2 = "1.0";
            double dd1 = double.Parse(str1);
            double dd2 = double.Parse(str2);
            такой код породит ошибку только во втором случае, тогда нафига вот это вот было?
            count = decimal.Parse(tb_count.Text.Replace(",", "."));
            Ответить
            • А Parse() зависит от региональных настроек?
              Хотя решение все равно через жопу, можно было попросить спарсить с другими настройками.
              Ответить
    • забавно бы изменить разделитель перед 9 строкой где-нибудь в другом потоке
      Ответить
      • А ещё забавнее запустить эту программу в стране где десятичный разделитель не точка и не запятая. Или скормить ей число, где используются и точка и запятая (десятичный разделитель и разделитель тысяч)
        Ответить
        • Да сразу ей римские цифры на вход сунуть.
          Ответить
        • Это называется "прибито намертво к региональным настройкам". Потому программы одного региона могут не работать в других. Как DVD-диски, прямо.
          Ответить
    • > Parce
      к тому же.
      Ответить
    • vanished
      Ответить

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