Decimal group seperator for the fractional part

后端 未结 3 1228
误落风尘
误落风尘 2021-01-28 07:27

I wonder what would be the best way to format numbers so that the NumberGroupSeparator would work not only on the integer part to the left of the comma, but also on

3条回答
  •  [愿得一人]
    2021-01-28 08:12

    It might be best to work with the string generated by your .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 parts = new List();
                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();
    
        }
    }
    

    Outputs:

    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
    

提交回复
热议问题