如果我需要每秒(或更频繁地)更新存储的值并将该值转换为要显示的字符串,同时还试图使其更具可读性,那么处理此问题的最方便/最有效的方法是什么?除了使用科学记数法之外。
现在,我正在使用浮点数存储要显示的值,然后将该数字除以固定的数量(一千,一百万,一百万..),然后为其分配一个特定的后缀(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
答案 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