字符串格式数字千位123K、百万位123M、十亿位123B

Posted

技术标签:

【中文标题】字符串格式数字千位123K、百万位123M、十亿位123B【英文标题】:String Format Numbers Thousands 123K, Millions 123M, Billions 123B 【发布时间】:2012-07-31 01:39:28 【问题描述】:

有没有一种方法可以使用字符串格式化程序将 Thousands、Millions、Billions 格式化为 123K、123M、123B,而无需更改代码以将值除以 Thousand、Million 或 Billion?

String.Format("0:????", LargeNumber)

【问题讨论】:

【参考方案1】:

有不同的方法可以实现这一点,但对我来说最简单快捷的是使用the "," custom specifier

double value = 1234567890;

// Displays 1,234,567,890   
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));

// Displays 1,234,568K
Console.WriteLine(value.ToString("#,##0,K", CultureInfo.InvariantCulture));

// Displays 1,235M
Console.WriteLine(value.ToString("#,##0,,M", CultureInfo.InvariantCulture));

// Displays 1B
Console.WriteLine(value.ToString("#,##0,,,B", CultureInfo.InvariantCulture));

【讨论】:

如果我使用它作为“#,##0,,,.00B”它会四舍五入最后一位小数,但我不想要它。 value.ToString("0,,,.#B", CultureInfo.InvariantCulture) => 1.2B 有什么方法可以将它与货币一起使用? 十万户呢?我怎样才能得到它?【参考方案2】:

我在扩展方法中使用了这种混合格式(只需将其添加到您的项目中即可享受)?

public static string ToKMB(this decimal num)

    if (num > 999999999 || num < -999999999 )
    
        return num.ToString("0,,,.###B", CultureInfo.InvariantCulture);
    
    else
    if (num > 999999 || num < -999999 )
    
        return num.ToString("0,,.##M", CultureInfo.InvariantCulture);
    
    else
    if (num > 999 || num < -999)
    
        return num.ToString("0,.#K", CultureInfo.InvariantCulture);
    
    else
    
        return num.ToString(CultureInfo.InvariantCulture);
    

用途:

((decimal)235).ToKMB();
// 235

((decimal)1235).ToKMB();
// 1.2K

((decimal)6271235).ToKMB();
// 6.27M

((decimal)93246571235).ToKMB();
// 93.247B

注意事项:

它会为更大的数字返回更多细节,我喜欢它。

它也支持负数。 (感谢@Dusty 在 cmets 中的注释。

我在这个例子中为decimal数字写了一个方法,你可以为它写一些覆盖方法来支持intlongdouble在没有任何转换的情况下使用它,例如:

myIntNumber.ToKMB();

myLongNumber.ToKMB();

myDoubleNumber.ToKMB();

myDecimalNumber.ToKMB();

【讨论】:

十万户呢?我怎样才能得到它? @ChandanKumar,你的意思是像 100,000 这样的数字吗?我的扩展方法 (((decimal)100000).ToKMB()) 为其返回此结果:100k 值得注意的是,如果所有 if 条件也涵盖否定条件,则这涵盖了更完整的用例……例如,if(num &gt; 999 || num &lt; -999)【参考方案3】:

您可以实现一个ICustomFormatter,将值除以千、百万或十亿,并像这样使用它:

var result = string.Format(new MyCustomFormatter(), "0:MyFormat", number);

【讨论】:

实现应该是ICustomFormatter和IFormatProvider接口

以上是关于字符串格式数字千位123K、百万位123M、十亿位123B的主要内容,如果未能解决你的问题,请参考以下文章

为啥数字要三个字加一个逗号呢?

在python中将长数字格式化为字符串

用百万 (M) 和十亿 (B) 后缀格式化数字

谷歌表格将数字格式化为十亿/百万/数千,巧妙地[重复]

0到7组成无重复数字的五位数,有多少个奇数

Python3练习题 025 一个数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同