none
decimal.Parse("75") возвращает 5! RRS feed

  • Вопрос

  • Всем добрый день! Где то около полугода назад я обращался за помощью сообщества с вопросом о подмене в числе знака "-" на 7, то есть число -1 превращалось в 71. Проблема была решена благодаря  Algol36. Ссылка на топик: тыц

    Так вот, обнаружилась новая проблема! При выполнении преобразования текстовой переменной в числовую, происходит утеря символа "7". Причем только если символ на первой позиции.

    textBoxResult.Clear();
                try
                {
                    textBoxResult.Text += "Text to convert: " + textBoxText.Text + System.Environment.NewLine;
                    textBoxResult.Text += "Parse method: "+ System.Environment.NewLine;
                    textBoxResult.Text += "decimal: " + decimal.Parse(textBoxText.Text).ToString() + System.Environment.NewLine;
                    textBoxResult.Text += "long: " + long.Parse(textBoxText.Text).ToString() + System.Environment.NewLine;
                    textBoxResult.Text += "int: " + int.Parse(textBoxText.Text).ToString() + System.Environment.NewLine;
                    textBoxResult.Text += "Convert method: " + System.Environment.NewLine;
                    textBoxResult.Text += "decimal: " + Convert.ToDecimal(textBoxText.Text).ToString() + System.Environment.NewLine;
                    textBoxResult.Text += "int: " + Convert.ToInt32(textBoxText.Text).ToString() + System.Environment.NewLine;
                }
                catch (Exception ex)
                {
    
                    textBoxResult.Text += ex.Message + System.Environment.NewLine;
                }

    Результат:

    Text to convert: 777
    Parse method:
    decimal: 77
    long: 77
    int: 77
    Convert method:
    decimal: 77
    int: 77

    Облазил все региональные настройки - но даже и представить не могу, что может так повлиять...


    19 июля 2012 г. 12:20

Ответы

  • Так же проверьте что у вас записанно в реестре по адресу

    HKCU\Control Panel\International\sPositiveSign

    HKU\.DEFAULT\Control Panel\International\sPositiveSign

    • Предложено в качестве ответа LXGDARKEditor 19 июля 2012 г. 13:28
    • Помечено в качестве ответа Abolmasov Dmitry 24 июля 2012 г. 11:34
    19 июля 2012 г. 13:22

Все ответы

  • Добрый день. Так как у вас уже был похожий прицедент с шутниками, попробуйте проверить региональные настройки на машине
    19 июля 2012 г. 13:03
  • Интересно. Похоже на то, что на семёрку заменён знак положительного числа. Однако, покопался в региональных настройках - вроде нет такого пункта.

    Тем не менее, в коде можно задать знак положительного числа в культуре.

    const string number = "777";
    
    Console.WriteLine(int.Parse(number)); // выводит 777
    
    CultureInfo ci = new CultureInfo("ru-RU");
    ci.NumberFormat.PositiveSign = "7";
    
    Console.WriteLine(int.Parse(number, ci)); // выводит 77

    Такая проблема в одном конкретном приложении или во всех? Если в одном - надо искать, где шутник заменил PositiveSign в коде.

    19 июля 2012 г. 13:11
  • Так же проверьте что у вас записанно в реестре по адресу

    HKCU\Control Panel\International\sPositiveSign

    HKU\.DEFAULT\Control Panel\International\sPositiveSign

    • Предложено в качестве ответа LXGDARKEditor 19 июля 2012 г. 13:28
    • Помечено в качестве ответа Abolmasov Dmitry 24 июля 2012 г. 11:34
    19 июля 2012 г. 13:22
  • Спасибо за ответы! Разобрался! Оказывается в окне установки региональных параметров знака положительного числа нет, но в реестре такой пункт есть(sPositiveSign), и там была 7!

    Исправил  - все стало на свои места...


    19 июля 2012 г. 13:22
  • Мой вам совет дайте хорошенько по шее этому пользователю
    19 июля 2012 г. 13:25
  • Привет. Не забывайте отмечать ответ, решивший вашу проблему. Спасибо.

    Для связи [mail]

    24 июля 2012 г. 11:35