【问题标题】:Fomatting big numbers to string C#将大数字格式化为字符串 C#
【发布时间】:2018-11-07 14:38:11
【问题描述】:

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

现在我使用浮点数来存储我想要显示的值,然后我将该数字除以固定数量(一千、一百万、十亿..)并为其分配一个特定的后缀(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

【问题讨论】:

  • 你应该考虑使用Standard Numeric Format Strings
  • 太基于意见了。
  • 首先你应该有 if-else if-else 语句,然后我希望它输出 123.456K。
  • 考虑作为一个选项 MMO 数字格式 1KKK = 1 000 000 000 和电子 1K5 = 1500 (Ohm ;)。
  • @juharr - ToString 默认使用 CurrentCulture。一些文化使用',' 作为小数分隔符。

标签: c# visual-studio unity3d numbers


【解决方案1】:

这是我的建议:

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

【讨论】:

  • 试过了,很好,非常感谢。我可能会用它作为我需要的基础。
猜你喜欢
  • 2021-05-10
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
  • 2021-07-09
相关资源
最近更新 更多