C#数字格式:前导加号和空格

Posted

技术标签:

【中文标题】C#数字格式:前导加号和空格【英文标题】:C# number format: leading plus sign AND spaces 【发布时间】:2018-05-02 06:05:15 【问题描述】:

我想做的是在财务报告中显示这样的数字:

+   5000
+    176
-  10000
- 620230

所以我需要打印出 6 位长的数字,并带有前导符号。

我尝试将前导符号与前导空格结合起来,如下所示:String.Format("0,7:+#;-#;+0", value);,但事实证明它给了我:

   +5000
    +176
  -10000
 -620230

有没有办法使用 String.Format 来获得我想要的输出?

编辑:我知道我可以制作自己的格式函数来实现该结果,并且我确实使用了一个。出于好奇,我向String.Format 询问是否可以完成。

【问题讨论】:

我强烈怀疑没有。我可能只是编写一个方法来格式化它,方法是提取符号,然后用适当的填充分别格式化绝对值。与尝试大量字符串格式相比,这可能会花费更少的时间来编写。 【参考方案1】:

您需要一些技巧来组合各个部分(符号和数字)。这是如何完成的:

string.Format("0:+;-;+0,7:#;#;0",someNumber);

0,7:#;#;0 将格式化数字,以便仅显示绝对值。而第一部分0:+;-;+ 只会根据值显示符号。为方便起见,您可以创建自己的方法来包装该行代码。

【讨论】:

如果有人说他们“知道 C++”,你会希望他们看到这个格式字符串并知道它的作用吗?如果有人“熟悉 C++”并看到了这个格式字符串,你认为他们可以遵循的最有效的路径是什么?【参考方案2】:

这是一个返回格式化字符串的方法。这很不言自明。

static string FormatFinancialNumber(int number) 
    string sign = number < 0 ? "-" : "+"; // decide the sign
    return sign + Math.Abs(number).ToString().PadLeft(7); // Make the number part 7 characters long

用法:

Console.WriteLine(FormatFinancialNumber(1));
Console.WriteLine(FormatFinancialNumber(-12));
Console.WriteLine(FormatFinancialNumber(123));
Console.WriteLine(FormatFinancialNumber(-1234));
Console.WriteLine(FormatFinancialNumber(12345));

输出:

+      1
-     12
+    123
-   1234
+  12345

【讨论】:

优雅方案+1 谢谢,这也是我正在使用的功能。我只是出于对 String.Format 的好奇而问这个问题。也许我应该在问题中说明这一点。 @AVAVT King King 的回答使用string.Format。但对我来说,可读性更重要。

以上是关于C#数字格式:前导加号和空格的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:匹配字母数字和空格,但前导空格除外

限制 XSD 中的字符串,使它们没有前导或尾随空格,并且只包含字母数字、连字符和下划线?

完全匹配,除了前导和尾随特殊字符(包括空格)

如何写没有前导零或前导空格的时间?

第128章 SQL函数 %SQLSTRING

删除 Eclipse 中单行注释中多余的前导空格