它可能是最好与你的.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
,因为它是无效的。他们不会以同样的方式分组(数千人,数十人,数百人),除非第一组是两项:'3.14,159,265,358,979' – Plutonix 2014-10-05 12:23:46
咦?显然需要从逗号开始,十分之一,百分之一和千分之一会成为一个完美的正常组!这不是关于什么 - 它是关于可读性的! – TaW 2014-10-05 12:24:50
@TaW有点主观,但它对我来说不可读。数字组逗号提示它是一个很大的数字(数千亿或者某个东西),直到你找到点,这看起来很奇怪。这不是一种常用的格式,这可能是它不起作用的原因。在你提出问题之前,我不会猜想有人会想这样来格式化他们的数字。 – BartoszKP 2014-10-05 12:45:19