2016-11-17 4 views
0

У меня есть две строки: 1.5 и 1,5Как я могу определить культуру французского или нас из строкового десятичного формата?

Я хочу, чтобы преобразовать это в десятичную, но я хочу, чтобы автоматически определять культуру: с точки нам культуру и с разделителями фр культуры

Что такое лучший способ сделать это ?

+3

Вы не можете сделать это со 100% уверенностью, потому что запятая может означать, немецкий или русский культуры, и точка может быть США или Великобритании культура. – dymanoid

+1

Хуже того, что означает '1543'? Это может быть «1.543» или «1543» в зависимости от культуры. –

+0

Если правила, которые вы хотите следовать **, это просто **, то делайте то, что вы сказали, ищите точку, если вы найдете ее, тогда у вас есть культура, если вы найдете запятую, тогда у вас есть культура fr. В чем вопрос? Лучший способ сделать ** точно ** то, что вы просили, - это 1-2 if-statements. –

ответ

2

Если число не может содержать разделители тысяч групп вы могли бы использовать это:

var usCulture = new CultureInfo("en-US"); 
var frCulture = new CultureInfo("fr-FR"); 
NumberStyles ns = NumberStyles.Any & ~NumberStyles.AllowThousands; // without thousands 

string[] strings = {"1.5", "1,5"}; 
foreach (string s in strings) 
{ 
    decimal d; 
    bool isUsCulture = decimal.TryParse(s, ns, usCulture, out d); 
    bool isFrCulture = decimal.TryParse(s, ns, frCulture, out d); 
} 

Обратите внимание, что теперь вы можете обнаружить культуру, но только если она содержит десятичный разделитель. Число, подобное «2», может быть нами или fr.

+0

Если я могу приложить к этому вопросу ... Если бы у меня было приложение в нескольких странах с разными стилями чисел, какой бы лучший способ добавить значение (число) в мою базу данных и сделать число «универсальным», ? – FiN

+0

@FiN: нет «универсального» номера, но вы можете указать культуру. Однако ваш вопрос не имеет смысла, потому что номер должен храниться как число, а не как строка, f.e. как 'DECIMAL (18,4)'. –

+0

Вот почему я спрашиваю, могу ли я получить значение поля, где он говорит '1,24', что произойдет ... Будет ли он сохранять его в базе данных как' 1.24' или ... – FiN

0

Вы можете попробовать: вы вставляете этот код в строку сначала по функциональной программе.
используется для сепараторов "." например: decimal.Parse("0.2")

var usCulture = new CultureInfo("en-US"); 
Thread.CurrentThread.CurrentCulture = usCulture; 
Thread.CurrentThread.CurrentUICulture = usCulture ; 
Смежные вопросы