В это место входит культура форматирования. Вам нужно получить спецификатор формата, соответствующий вашим требованиям. По умолчанию у вас есть текущая культура, культура пользовательского интерфейса или инвариантная культура. Результаты, которые вы получаете, подразумевают, что вы используете американскую культуру.
Если у вас есть определенная культура, которую вы хотите вывести на номер, используйте это. Если нет, то вы можете создать свой собственный:
var nfi =
new NumberFormatInfo
{
NumberDecimalSeparator = ",",
NumberGroupSeparator = "."
};
var ci =
new CultureInfo(CultureInfo.InvariantCulture.LCID) { NumberFormat = nfi };
return string.Format(ci, "{0:#,###.########}", 32445.324777M)
Если вы хотите, чтобы также получить наиболее компактный номер, вы должны будете использовать свой собственный код. Самый простой способ - попробовать оба и вернуть меньшую результирующую строку.
Если вы хотите, вы можете использовать синтаксис string.Format
тоже - вы можете написать свой собственный ICustomFormatter
, чтобы справиться с этим:
void Main()
{
var number = 32445.324777M;
string.Format(new MyNumberFormatter(), "{0:MyG}", number).Dump();
}
class MyNumberFormatter : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type type)
{
return this;
}
public string Format(string fmt, object arg, IFormatProvider formatProvider)
{
if (fmt != "MyG" || !(arg is decimal)) return string.Format(CultureInfo.CurrentCulture, "{0:" + fmt + "}", arg);
return "Hi";
}
}
Эта реализация немного Hacky, конечно, я уверен, что вы можете найти лучшие примеры. Но это действительно работает. В методе Format
вы можете выбрать формат, который лучше подходит для данного номера, или даже просто попробовать что-то вроде обычного ToString("G", CultureInfo.InvariantCulture)
и добавить десятичные разделители к этой строке. Независимо плывет лодка :)
Вы адресация 2 проблемы с вашим вопросом: 1) переключатель группа разделители с десятичным разделителем (использование соответствующей культуры) и 2) не ограничивает количество знаков после запятой, от не явно, используя '' # ... –