Форматировать десятичную строку в правильную информацию о культуре

Каков наилучший способ отформатировать десятичную сумму в строку для отображения пользовательского интерфейса в правильной информации о культуре?


person c00ke    schedule 26.02.2010    source источник
comment
Что не так с myDecimal.ToString()?   -  person Joey    schedule 26.02.2010
comment
Загрузка объекта nHibernate из базы данных, свойство является десятичным, и при вызове toString() оно форматируется с правильными десятичными знаками. Однако при сохранении настройки того же свойства из текста, например. распределение.Цена = Decimal.Parse(цена, КультураИнформация.ТекущаяКультура); но после того, как это установлено, десятичные разряды вызова calllocation.Price.toString() не добавляются. например, после десятичного синтаксического анализа 15 требуется 15,00, но toString просто дает 15. Странно?   -  person c00ke    schedule 26.02.2010


Ответы (4)


Добавьте формат к ToString: myDecimal.ToString("#.00") или myDecimal.ToString("C").

Для десятичного числа, допускающего значение NULL (decimal?), вам нужно будет использовать свойство .Value (myNullableDecimal.Value.ToString("C")) или преобразовать значение в простое (не допускающее значение NULL) десятичное число. Не делайте этого, когда значение равно null, иначе вы получите исключение!

См. документацию для Standard или Пользовательский числовой строки формата.

person Hans Kesting    schedule 26.02.2010
comment
Свойство nHibernate было десятичным? поэтому параметр формата был недоступен для метода toString. Теперь создайте десятичную переменную и используйте ваш ответ и получите удовольствие. ваше здоровье! - person c00ke; 26.02.2010
comment
если это Nullable‹decimal›, вы можете либо использовать свойство .Value, либо привести его к десятичному (если вы уверены, что оно не равно null) - person Hans Kesting; 26.02.2010
comment
ссылка не работает - person Eduardo Hernández; 21.06.2019
comment
@WeaponX — исправлено. Спасибо за предупреждение. - person Hans Kesting; 21.06.2019

Почему бы и нет decimalVar.ToString("F2", CultureInfo.CurrentCulture);. Строки формата (часть «F2») и их назначение см. в разделе Стандартный числовой формат. Строки и строки пользовательского числового формата

person Philip Rieck    schedule 26.02.2010

использовать:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false);
person NetSide    schedule 26.02.2010
comment
Ну и что? Он не запрашивает динамическую культурную информацию. - person NetSide; 26.02.2010
comment
JavaScript не поддерживает "глобальный" подход, поэтому я использовал .ToString(#.00, New CultureInfo(en-GB, False)) - person Zymotik; 28.03.2012

Кроме того, если вы хотите использовать культуру, указанную пользователем, вы можете использовать:


string userInfo = "en-US";

yourDecimal.ToString("N2", CultureInfo.CreateSpecificCulture(userInfo));

or

yourDecimal.ToString("N2", new CultureInfo(userInfo));
person Derek J.    schedule 09.10.2015