用逗号格式化大数字

时间:2009-09-01 23:10:40

标签: c# formatting numbers

我需要格式化一个数字,以便有一个逗号分隔任意数字的千位数,包括10000.例如10000变为10,000但9999剩余为9999。

我想使用格式字符串来执行此操作,因为我不想测试数据以查看它的范围是什么。

有谁知道怎么做?

4 个答案:

答案 0 :(得分:8)

对于不同的值,格式字符串的行为不同,因此您可以做的最好的事情是:

int n;

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

(这将使用用户的文化;如果需要不同的文化,则传递INumberFormatInfo / CultureInfo。)

MSDN:StandardCustom Numeric Format Strings

答案 1 :(得分:2)

num > 9999 ? num.ToString("N0", CultureInfo.InvariantCulture) : num.ToString();

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

答案 2 :(得分:2)

我建议您创建自己的IFormatProvider,它具有快速长度检查,如果它是五个或更多字符,则通常使用千位分隔符进行格式化,如果是四个或更少字符,则不使用千位分隔符。

您可以轻松修改MSDN docs on IFormatProvider

中的示例

答案 3 :(得分:0)

必须在某个级别进行范围检查。如果你这样实现它,你可以在一定程度上嵌入格式化框架中的范围检查,如果数字少于5位,则绕过默认格式(包括组分隔符):

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));
    }
}