代码之家  ›  专栏  ›  技术社区  ›  theringostarrs

用逗号格式化大数字

  •  0
  • theringostarrs  · 技术社区  · 15 年前

    我需要格式化一个数字,以便有一个逗号分隔的任何数字超过和包括10000千位。10000变为10000,但9999保留为9999。

    我希望使用一个格式字符串来实现这一点,因为我不希望必须测试数据以查看它是否在什么范围内。

    有人知道怎么做吗?

    4 回复  |  直到 15 年前
        1
  •  8
  •   dtb    15 年前

    格式字符串对于不同的值不能有不同的行为,因此您最好:

    int n;
    
    string s = n >= 10000 ? n.ToString("n0") : n.ToString("d");
    

    (这将使用用户的区域性;通过 INumberFormatInfo / CultureInfo 如果需要不同的文化背景。)

    MSDN: Standard Custom Numeric Format Strings

        2
  •  2
  •   Steve T    15 年前
    num > 9999 ? num.ToString("N0", CultureInfo.InvariantCulture) : num.ToString();
    

    “N0”假设您不需要小数。 NFormat

        3
  •  2
  •   womp    15 年前

    您可以很容易地从 MSDN docs on IFormatProvider .

        4
  •  0
  •   BlueMonkMN    15 年前

    class MyFormat : System.IFormatProvider, ICustomFormatter
    {
        #region IFormatProvider Members
    
        public object GetFormat(Type formatType)
        {
            return this;
        }
    
        #endregion
    
    
        #region ICustomFormatter Members
    
        public string Format(string format, object arg, IFormatProvider formatProvider)
        {
            if (arg is double)
                if (((double)arg >= 10000) || ((double)arg <= -10000))
                    return ((double)arg).ToString(format);
                else
                    return ((double)arg).ToString("R");
    
            if (arg is decimal)
                if (((decimal)arg >= 10000) || ((decimal)arg <= -10000))
                    return ((decimal)arg).ToString(format);
                else
                    return ((decimal)arg).ToString("R");
    
            return arg.ToString();
        }
    
        #endregion
    }
    
    class Program
    {
        static MyFormat gFormat = new MyFormat();
    
        static void Main(string[] args)
        {
    
            double dblVal1 = 9999, dblVal2 = 123456;
            Console.WriteLine(String.Format(gFormat, "{0:N0} {1:N0}", dblVal1, dblVal2));
        }
    }