Вниз
Скачать: CL | DM;

DecimalSeparator & c#   Найти похожие ветки 

← →
Галинка ©   (2006-12-16 21:25) [0]

Как правильно применять натсройки региональные при конвертировании из строки в дробное число?

Т.к. нахожусь в Германии, то региональные настройки немецкие. Десятичный знак по умолчанию запятая. Но в конечных xml-файл надо выводить с точкой. Изменением настроек на американские добилась сохранения числе с точкой в качестве десятичного знака. Но теперь System.Convert не понимает точек. Как быть?


← →
Eraser ©   (2006-12-16 21:38) [1]

> [0] Галинка ©   (16.12.06 21:25)

в xml файлы записывайте значение в экспонентном (Scientific) формате.
           decimal d = 3.14M;
           string s = d.ToString("E");
           MessageBox.Show(s);

а для отображения лучше использовать региональные настройки.

ЗЫ у Рихтера данная тема хорошо объясняется.


← →
Галинка ©   (2006-12-16 21:45) [2]

спасибо. А я нашла еще метод Replace у строки. Если перед сохранением и перед конвертацией просто менять десятичный знак? Типа:

при записи в xml:

curObjNode.InnerText = ((string)curObject.doubleValue.ToString()).Replace(",", ".");

а при чтении:

curObject.doubleValue = Convert.ToDouble(((string)curObjNode.InnerText).Replace(".", ","));


← →
Eraser ©   (2006-12-16 21:48) [3]

> [2] Галинка ©   (16.12.06 21:45)

плохой метод, т.к. никто не гарантирует, что в какой-нибудь стране будет использоваться в качестве разделителя, к примеру, знак вопроса.
лучше сохранять в универсальном формате.


← →
Eraser ©   (2006-12-16 21:57) [4]

держи еще вариант, по аналогии с Делфи
           System.Globalization.NumberFormatInfo numInfo = new System.Globalization.NumberFormatInfo();
           decimal d = 3.14M;
           numInfo.NumberDecimalSeparator = ".";
           string s = d.ToString("n", numInfo);
           MessageBox.Show(s);


← →
Галинка ©   (2006-12-16 22:07) [5]

Eraser, спасибо еще раз. С ToString у меня проблем нет. Проблемы с обратным конвертом. т.е. ты предлагаешь реплэйс оставить только для конвертирования строки в число?

кстати. сейчас у меня именно так и есть.


← →
Eraser ©   (2006-12-16 22:47) [6]

> [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 23:52) [7]

спасибо. беда в том, что я даже не представляю, что искать (( только помидорами не кидайте (( теперь буду знать про парсер )) чес слово


← →
Eraser ©   (2006-12-17 00:07) [8]

> [7] Галинка ©   (16.12.06 23:52)


> беда в том, что я даже не представляю, что искать

Рихтера книгу купи, там все с самого начала объясняется + куча примеров.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.035 c
15-1166426041
data
2006-12-18 10:14
2007.01.07
Еще одна спортивная ветка)


15-1165350127
Cyrax
2006-12-05 23:22
2007.01.07
Какой смысл оформлять классы, не имеющие...


2-1166358355
Apachi
2006-12-17 15:25
2007.01.07
как можно уменьшить размер компилируемой DLL


2-1166174674
Legolas
2006-12-15 12:24
2007.01.07
Работа с окнами


2-1166366846
Bolt
2006-12-17 17:47
2007.01.07
Резервирование




   Наверх