Как изменить региональные настройки?

А конкретнее, как преобразовать строку в число или как заменить точку на запятую, например "2.56", если разделитель разрядов в системе запятая.

Мнимое решение

Double tmp = Double.Parse(str.Replace('.', ','));

т.к. если в системе по умолчанию установленна точка а не запятая то мы опять получим исключение.

Работающее решение

Сначала мы пытаемся превратить строку в число с помощью текущих региональных настроек, если не удается заменяем точки в строке на запятые

Double tmp;
if (Double.TryParse(str, out tmp) == false)
{
    Double.TryParse(str.Replace('.', ','), out tmp);
}

Улучшенное работающее решение

В данном случае мы сначала подготавливаем строку, потом пытаемся превратить её в число если не удается то мы меняем не строку а параметры региональных настроек

#region GetDoubleFromString(String aStr)
       
private static Double GetDoubleFromString(String aStr)
{
    // Подготавливаем строку
    aStr = aStr.Trim(new char[] {'(', ')', ' '});

    // Временная переменная
    Double tmpd = 0;

    // Получаем текущие настройки
    var format = new System.Globalization.NumberFormatInfo();

    // Пытаемся преобразовать строку в число
    if (!Double.TryParse(aStr, NumberStyles.Float, format, out tmpd))
    {
        if (format.NumberDecimalSeparator == ",")
            format.NumberDecimalSeparator = ".";
        else if (format.NumberDecimalSeparator == ".")
            format.NumberDecimalSeparator = ",";
        // Если всеравно не удалось то возвращаем -1
        if (!Double.TryParse(aStr, NumberStyles.Float, format, out tmpd))
            return -1;
    }
    return tmpd;
}
#endregion

P.S. Таким образом замена точки в строке, при преобразовании строки в число, была решена окончательно :)

Currently rated 3.5 by 4 people

  • Currently 3.5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Comments

Add comment


 

biuquote
  • Comment
  • Preview
Loading