У меня была та же проблема. Я хотел форматировать числа, такие как «Общий» формат в электронных таблицах, то есть показывать десятичные знаки, если они значительны, но отрубить их, если нет. Другими словами:
1234.56 => 1,234.56
1234 => 1,234
blockquote>Он должен поддерживать максимальное количество мест после десятичной, но не ставьте конечные нули или точки, если это не требуется, и, конечно же, это должно быть дружественным к культуре. Я никогда не понимал, как это сделать, используя только String.Format , но сочетание String.Format и Regex.Replace с некоторой помощью в области культуры от NumberFormatInfo.CurrentInfo выполнил задание (LinqPad C # Program).
string FormatNumber
(T number, int maxDecimals = 4) { return Regex.Replace(String.Format("{0:n" + maxDecimals + "}", number), @"[" + System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator + "]?0+$", ""); } void Main(){ foreach (var test in new[] { 123, 1234, 1234.56, 123456.789, 1234.56789123 } ) Console.WriteLine(test + " = " + FormatNumber(test)); } Производит:
123 = 123 1234 = 1,234 1234.56 = 1,234.56 123456.789 = 123,456.789 1234.56789123 = 1,234.5679