![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DecimalSeparator & c#
Галинка © (2006-12-16 21:25:00)Как правильно применять натсройки региональные при конвертировании из строки в дробное число?
Т.к. нахожусь в Германии, то региональные настройки немецкие. Десятичный знак по умолчанию запятая. Но в конечных xml-файл надо выводить с точкой. Изменением настроек на американские добилась сохранения числе с точкой в качестве десятичного знака. Но теперь System.Convert не понимает точек. Как быть?
Eraser (2006-12-17 00:07:00) [1]> [7] Галинка © (16.12.06 23:52)
> беда в том, что я даже не представляю, что искать
Рихтера книгу купи, там все с самого начала объясняется + куча примеров.
Галинка (2006-12-16 23:52:00) [2]спасибо. беда в том, что я даже не представляю, что искать (( только помидорами не кидайте (( теперь буду знать про парсер )) чес слово
Eraser (2006-12-16 22:47:00) [3]> [5] Галинка © (16.12.06 22:07)
> т.е. ты предлагаешь реплэйс оставить только для конвертирования
> строки в число?
ни в коем случае! никаких реплейсов быть не должно.
System.Globalization.NumberFormatInfo numInfo = new System.Globalization.NumberFormatInfo();
decimal d = 3.14M;
numInfo.NumberDecimalSeparator = ".";
string s = d.ToString("n", numInfo);
MessageBox.Show(s);
d = decimal. Parse(s, numInfo);
s = d.ToString("n");
MessageBox.Show(s);
когда же уже справку читать начнешь? :)
Галинка (2006-12-16 22:07:00) [4]Eraser, спасибо еще раз. С ToString у меня проблем нет. Проблемы с обратным конвертом. т.е. ты предлагаешь реплэйс оставить только для конвертирования строки в число?
кстати. сейчас у меня именно так и есть.
Eraser (2006-12-16 21:57:00) [5]держи еще вариант, по аналогии с Делфи
System.Globalization.NumberFormatInfo numInfo = new System.Globalization.NumberFormatInfo();
decimal d = 3.14M;
numInfo.NumberDecimalSeparator = ".";
string s = d.ToString("n", numInfo);
MessageBox.Show(s);
Eraser (2006-12-16 21:48:00) [6]> [2] Галинка © (16.12.06 21:45)
плохой метод, т.к. никто не гарантирует, что в какой-нибудь стране будет использоваться в качестве разделителя, к примеру, знак вопроса.
лучше сохранять в универсальном формате.
Галинка (2006-12-16 21:45:00) [7]спасибо. А я нашла еще метод Replace у строки. Если перед сохранением и перед конвертацией просто менять десятичный знак? Типа:
при записи в xml:
curObjNode.InnerText = ((string)curObject.doubleValue.ToString()).Replace(",", ".");
а при чтении:
curObject.doubleValue = Convert.ToDouble(((string)curObjNode.InnerText).Replace(".", ","));
Eraser (2006-12-16 21:38:00) [8]> [0] Галинка © (16.12.06 21:25)
в xml файлы записывайте значение в экспонентном (Scientific) формате.
decimal d = 3.14M;
string s = d.ToString("E");
MessageBox.Show(s);
а для отображения лучше использовать региональные настройки.
ЗЫ у Рихтера данная тема хорошо объясняется.