C# 小数部分的十进制分组分隔符

C# 小数部分的十进制分组分隔符,c#,decimal,comma,separator,fractions,C#,Decimal,Comma,Separator,Fractions,我想知道设置数字格式的最佳方法是什么,这样NumberGroupSeparator不仅可以用于逗号左侧的整数部分,还可以用于逗号右侧的小数部分 Math.PI.ToString("###,###,##0.0##,###,###,###") // As documented .. // ..this doesn't work 3.14159265358979

我想知道设置数字格式的最佳方法是什么,这样
NumberGroupSeparator
不仅可以用于逗号左侧的整数部分,还可以用于逗号右侧的小数部分

Math.PI.ToString("###,###,##0.0##,###,###,###")  // As documented ..
                                                // ..this doesn't work
3.14159265358979                                // result
3.141,592,653,589,79                            // desired result

NumberGroupSeparator
中所述,它只在逗号的左侧起作用。我想知道为什么???

有点笨重,它对科学数字不起作用,但这里有一个尝试:

class Program
{
    static void Main(string[] args)
    {
        var π=Math.PI*10000;

        Debug.WriteLine(Display(π));
        // 31,415.926,535,897,931,899
    }

    static string Display(double x)
    {
        int s=Math.Sign(x);
        x=Math.Abs(x);
        StringBuilder text=new StringBuilder();
        var y=Math.Truncate(x);
        text.Append((s*y).ToString("#,#"));
        x-=y;
        if (x>0)
        {
            // 15 decimal places is max reasonable precision
            y=Math.Truncate(x*Math.Pow(10, 15));
            text.Append(".");
            text.Append(y.ToString("#,#").TrimEnd('0'));
        }
        return text.ToString();
    }

}

最好使用
.ToString()
生成的字符串:


好吧,这不是我的强项,但我想这可能是我最好的选择:

 string input = Math.PI.ToString();
 string decSeparator = System.Threading.Thread.CurrentThread
                      .CurrentCulture.NumberFormat.NumberGroupSeparator;
 Regex RX = new Regex(@"([0-9]{3})");
 string result  = RX.Replace(input , @"$1" + decSeparator);

谢谢收听..

,因为它无效。除非第一组是两个项目:
3.14159265358979
?显然,一个人需要从逗号和十分之一开始分组,百分之一和千分之一将构成一个完全正常的分组!这不是它的意义所在——它是关于可读性的@TaW有点主观,但我看不懂。数字组逗号表示这是一个大数字(数千亿左右),直到你发现这个点,它看起来真的很奇怪。这不是一种常用的格式,这可能就是它不起作用的原因。在你提问之前,我猜不会有人想这样格式化他们的数字;但当你这样做的时候,你希望它们可读。
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
 string input = Math.PI.ToString();
 string decSeparator = System.Threading.Thread.CurrentThread
                      .CurrentCulture.NumberFormat.NumberGroupSeparator;
 Regex RX = new Regex(@"([0-9]{3})");
 string result  = RX.Replace(input , @"$1" + decSeparator);