Это может быть лучше работать со строкой, сгенерированного вашим .ToString()
:
class Program
{
static string InsertSeparators(string s)
{
string decSeparator = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator;
int separatorPos = s.IndexOf(decSeparator);
if (separatorPos >= 0)
{
string decPart = s.Substring(separatorPos + decSeparator.Length);
// split the string into parts of 3 or less characters
List<String> parts = new List<String>();
for (int i = 0; i < decPart.Length; i += 3)
{
string part = "";
for (int j = 0; (j < 3) && (i + j < decPart.Length); j++)
{
part += decPart[i + j];
}
parts.Add(part);
}
string groupSeparator = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator;
s = s.Substring(0, separatorPos) + decSeparator + String.Join(groupSeparator, parts);
}
return s;
}
static void Main(string[] args)
{
for (int n = 0; n < 15; n++)
{
string s = Math.PI.ToString("0." + new string('#', n));
Console.WriteLine(InsertSeparators(s));
}
Console.ReadLine();
}
}
выходов:
3
3.1
3.14
3.142
3.141,6
3.141,59
3.141,593
3.141,592,7
3.141,592,65
3.141,592,654
3.141,592,653,6
3.141,592,653,59
3.141,592,653,59
3.141,592,653,589,8
3.141,592,653,589,79
потому что он является недействительным. они не будут группироваться одинаково (тысячи, десятки тысяч, сотни тысяч), если первая группа не будет 2 пункта: '3.14,159,265,358,979' – Plutonix
А? Очевидно, что нужно группировать, начиная с запятой и десятых, сотый и тысячный будут делать совершенно нормальную группу! Это не то, о чем речь - речь идет о читаемости! – TaW
@TaW Немного субъективно, но это не читаемо для меня. Числовые запятые группы указывают, что это большое количество (сотни миллиардов или что-то еще), пока вы не заметите точку, которая выглядит действительно странно. Это не формат, который обычно используется, и это, вероятно, причина, по которой он не работает. Перед вашим вопросом я бы не догадался, что кто-то захочет форматировать их номера. – BartoszKP