【问题标题】:Floating Point fixed length Number formatting c#浮点定长数字格式化c#
【发布时间】:2018-08-13 15:56:39
【问题描述】:

我想在 C# 中按如下方式格式化浮点数,以便 C# 中浮点数的整个宽度是固定长度(python 等效格式说明符 6.2f)我不希望它用 0 填充左边但用空格填充

100.00
 90.45
  7.23
  0.00

到目前为止我已经尝试过什么

string.Format({0:###.##},100); 
string.Format({0:###.##},90.45);
string.Format({0:###.##},7.23);
string.Format({0:###.##},0.00);

但输出不正确

100
90.45
7.23
      //nothing is printed

我也经历过this,但无法找到解决方案。 我知道 string.PadLeft 方法,但我想知道是否有比

更合适的方法
(string.format({0,0.00},number)).PadLeft(6," ")

编辑 我特别问是否有正确的内置方法,而不是是否可以使用相同的数学魔法来完成

【问题讨论】:

  • @maccettura 这是怎么重复的?我问是否有格式说明符可以做到这一点?现在,如果它可以不?任何人都可以编写一组复杂的 if 语句来实现我的目标,我问是否有内置的 c# 方法
  • 我不知道可以执行此操作的格式字符串,但您的左键盘看起来不错...
  • @SiddharthChabra 您希望格式说明符如何知道您所有其他数字的长度?您正在寻找要对齐的数字,副本完美地解决了这个问题。如果您想知道格式说明符是否可以做到,那么答案是 no
  • @maccettura 你有没有试过string.format({0,16},integer) 这告诉 C# 为整数分配一个 16 位的空间,即使数字更小并且数字的扩展更大。请删除您的重复标签,因为已标记的帖子未回答我的问题

标签: c# string-formatting format-specifiers


【解决方案1】:

如果您总是希望小数点后有 2 位数字,您可以在格式说明符中指定 00。您还需要使用右对齐的字段宽度(我使用 6 作为最大字段宽度)。

试试这个:

void Main()
{
    Console.WriteLine(string.Format("{0,6:##0.00}",100.0)); 
    Console.WriteLine(string.Format("{0,6:##0.00}",90.45));
    Console.WriteLine(string.Format("{0,6:##0.00}",7.23));
    Console.WriteLine(string.Format("{0,6:##0.00}",0.00));
}

在 LinqPad 中输出:

100.00
 90.45
  7.23
  0.00

【讨论】:

    【解决方案2】:

    在现代 .NET 5.0+ 中,您不需要调用 string.Format 目录。相反,在你的字符串前面使用$,并用{..}分隔变量

    double float1 = 100.0;
    double float2 = 0.2;
    Debug.WriteLine($"{float1:##0.00}");    // 100.00
    Debug.WriteLine($"{float2:##0.00}");    // 0.20
    

    【讨论】:

      猜你喜欢
      • 2019-10-02
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多