Мне нужно преобразовать значения из строки в 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 («», «») функция заменить .
с ,
и наоборот, но это не так, как я хочу, чтобы сделать
'Имеет смысл использовать CultureInfo.CurrentCulture.NumberFormat, а затем использовать жестко закодированные значения' - ну, на самом деле. Вы говорите, что хотите проанализировать значение, используя текущую культуру. Если вы знаете, в какой культуре пришло значение, вы должны передать это. Твердое кодирование не влияет на уравнение. Вы, по сути, говорите: «Разделите это значение, рассматривая периоды как десятичную точку, но я дам вам значение с запятой в виде десятичной точки» – Rob