2013-12-01 1 views
6

Мне нужно записать десятичное значение в базу данных доступа ms, но у меня проблема с значениями преобразования до десятичной в разных культурах. Имейте значения из файла, который разделяет commma. Стараюсь:Преобразование строки в десятичную: как обрабатывать десятичный разделитель в разных культурах

public decimal CSingleCulture (string str) 
{ 
    string sep = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator; 
    string s = str.Replace(",", sep); 

    return decimal.Parse(s);    
} 

если NumberDecimalSeparator = "." то работа хороша, но если NumberDecimalSeparator = "," начинаются проблемы ... decimal.Parse(s) всегда возвращают vlaues отделяет от точки. В этой ситуации возникает ошибка при вводе в базу данных.

ответ

9

Рекомендуемый способ справиться с этим - сохранить значение как число, а не строку. И в базе данных, и в вашей программе. Когда вы это делаете, ваша текущая проблема просто никогда не возникает.

Единственный раз, когда вы имеете дело с числами в строчном формате, это когда вы их показываете или принимаете пользовательский ввод. В этих сценариях вы можете использовать настройки культуры пользователя, чтобы они могли видеть и использовать их предпочтительный разделитель.

Если вам нужно преобразовать строку и число для сохранения, вы должны использовать преобразование инварианта культуры. Кажется, это то место, где вы падаете. Я подозреваю, что файл, который вы читаете, не имеет четко определенного формата. Убедитесь, что при чтении и записи файла вы используете CultureInfo.InvariantCulture. Если файл имеет четко определенный формат, который отличается от инвариантной культуры, то используйте соответствующую специальную информацию CultureInfo.

0

Не может понять, что вы пытаетесь выполнить, и я должен согласиться с другим ответом. Но одна вещь, которая хорошо знать, что вы можете использовать инвариантную культуру следующим образом:

double.Parse("15.0", CultureInfo.InvariantCulture) 

Это всегда будет ожидать точка символ для разделения ваших десятичных цифр, независимо от того, что происходит в культуре текущего потока.