2016-10-05 5 views
1

Мне нужно преобразовать значения из строки в double для разных регионов.Convert.ToDouble для разных значений CultureInfo

Давайте определят одну вещи: (. Экс-де-DE)

  • США культура использует строки, которые имеют .точки как указатель для десятичных значений
  • европейской культуры использует строки, которые имеют ,запятой указатель на десятичные значения.

Если вы пытаетесь преобразовать соответствующие строковые значения с CultureInfo задаются с помощью Convert.ToDouble функции он будет работать нормально:

Для US-ен:

_value = Convert.ToDouble("1.5", CultureInfo.GetCultureInfo("en-US").NumberFormat); //gets 1.5 

Для DE-де:

_value = Convert.ToDouble("1,5", CultureInfo.GetCultureInfo("de-DE").NumberFormat); //gets 1,5 

Но что, если нам нужно будет преобразовать значение с .dot с европейской CultureInfo или то же относится к значениям с ,запятая с US CultureInfo?

Я прошу об этом, потому что я всегда использую CultureInfo.CurrentCulture.NumberFormat, и когда языки будут изменены, это сломается. Имеет смысл использовать CultureInfo.CurrentCulture.NumberFormat, а затем использовать жестко закодированные значения, такие как CultureInfo.GetCultureInfo("en-US") или CultureInfo.GetCultureInfo("de-DE").

Это сломается и выдаст сообщение об ошибке:

Для US-ен:

_value = Convert.ToDouble("1,5", CultureInfo.GetCultureInfo("en-US").NumberFormat); //because there is comma sign in 1,5 

Для DE-де:

_value = Convert.ToDouble("1.5", CultureInfo.GetCultureInfo("de-DE").NumberFormat); //because there is dot sign in 1.5 

Я попытался решить эту проблему, необходимо сначала преобразовать Double значения из одного формата в другой. Двойной темп = от 1,5 до 1,5, а затем преобразование их в строку, но оно не работает.

Существует решение, где я могу использовать string.replace («», «») функция заменить . с , и наоборот, но это не так, как я хочу, чтобы сделать

+1

'Имеет смысл использовать CultureInfo.CurrentCulture.NumberFormat, а затем использовать жестко закодированные значения' - ну, на самом деле. Вы говорите, что хотите проанализировать значение, используя текущую культуру. Если вы знаете, в какой культуре пришло значение, вы должны передать это. Твердое кодирование не влияет на уравнение. Вы, по сути, говорите: «Разделите это значение, рассматривая периоды как десятичную точку, но я дам вам значение с запятой в виде десятичной точки» – Rob

ответ

0

Перед использованием CurrentCulture вас нужно установить его, как вы знаете, культура, как Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo («en-US»);

+0

Да, я знаю об этом, но поскольку я показываю данные в таблицу данных, я должен снова заменить строки 'String.Replace', поскольку преобразованные данные будут в другом формате. Значения, преобразованные в 'CultureInfo (« en-US »)' будут иметь '.'-dots и значения, преобразованные в CultureInfo (« de-DE »), будут иметь в себе', '-коммуты. – Dan