将大数字格式化为字符串C#

时间:2018-11-07 14:38:12

标签: c# visual-studio unity3d numbers

如果我需要每秒(或更频繁地)更新存储的值并将该值转换为要显示的字符串,同时还试图使其更具可读性,那么处理此问题的最方便/最有效的方法是什么?除了使用科学记数法之外。

现在,我正在使用浮点数存储要显示的值,然后将该数字除以固定的数量(一千,一百万,一百万..),然后为其分配一个特定的后缀(K,M ,B ..);但是我很确定这不是一种优雅的方法。.有什么建议吗?

脚本非常像这样:

float x = 123456;
float y;

if (x >= 1000 && x < 1000000)
{ 
    y = (x / 1000);
    Console.WriteLine(y.ToString("0.000") + "K"); 
}

if (x >= 1000000 && x < 1000000000)
{
   y = (x / 1000000);
   Console.WriteLine(y.ToString("0.000") + "M"); 
}     

if (x >= 1000000000 && x < 1000000000000)
{ 
    y = (x / 1000000000);
    Console.WriteLine(y.ToString("0.000") + "B"); 
} 

哪个返回123,456K

1 个答案:

答案 0 :(得分:4)

这是我的建议:

string[] suffixes = new string[]{ "", "K", "M", "B", "Q", "x10¹⁵", "x10¹⁸", "x10²¹", "x10²⁴" } ; // Replace with the suffixes you want
float number = 13248497894961536217986532f;
int suffixIndex = 0 ;
for( ; suffixIndex < suffixes.Length - 1 && number >= 1000 ; suffixIndex++ )
    number /= 1000;
Console.WriteLine( number.ToString("0.###") + suffixes[suffixIndex] ) ;

请注意,如果您没有提供足够的后缀,则可能会有不希望的结果:

例如,340282300000000x10²⁴,如果您提供float.MaxValue