【问题标题】:String Formatting for Integers c#整数的字符串格式化c#
【发布时间】:2011-10-05 18:56:03
【问题描述】:

我有一个包含两个字符串的类,一个反映当前年份,一个代表某个值。这些字段根据用户指定的格式(使用 string.format)进行组合。重要提示:用户输入的数据用于生成,因此它始终是整数,我们不必担心这一点。

我们的默认格式是“{0}-{1:000}”。但是,既然用户指定的数据是一个字符串,它就不想进行适当的格式化。这是一个例子:

用户输入 12 作为所需数据。格式化时,不显示 2011-0012,只显示 2011-12。我如何确保添加 0 而不做一些疯狂的循环来附加 0 或尝试解析数字(假设它是一个数字。应该只有足够的 0 来等于长度为 4 的字符串)?

这是我尝试过的一种格式:

"{0}-{1:0000}" -> 强制用户输入数字时的原始格式。 “{0}-{1:D4}” “{0}-{1:N4}”

【问题讨论】:

  • 有一个验证过程可确保输入的数据与格式匹配。如果没有,我们就忘记 0 并简单地输入 2011:aa。我的问题真正来自于希望尽可能地保持系统与旧系统一样,特别是如果我们自己生成数据(我们总是使用数字)
  • 2011-0012究竟代表什么?
  • 年份,然后是可以指定或生成的序列号。

标签: c# string-formatting integer


【解决方案1】:

你可以使用string.PadLeft():

string output = string.Format("{0}-{1}", "2011", input.PadLeft(4, '0'));

【讨论】:

  • 这个问题是它总是会在末尾添加四个 0(除非我错了)。字符串的长度必须为四。所以这意味着如果用户输入 123,那么结果字符串应该是 0123。不过,我总能得到长度并找出以这种方式添加多少个 0。如果默认格式发生变化,那么这是硬编码的,这就是为什么最好知道如何使用字符串格式来实现这一点。
  • @The Sheek Geek 最好看一下 Padleft。它保证使用填充的最小大小,并且除非必须,否则不会添加额外的字符。这种方法很好,除非你可以有负整数。在这种情况下你会看到一些奇怪的东西,比如“-3”变成“00-3”
  • @TheSheekGeek - String.Format 可能不是此任务的最佳解决方案。正如 BrokenGlass 指出的那样......**string.PadLeft()** 更适合这项工作。
【解决方案2】:

您可以使用string.PadLeft 将零添加到左侧,或使用int.TryParse 尝试转换为整数。后者将兼作您的验证检查。

【讨论】:

    猜你喜欢
    • 2011-08-27
    • 2021-05-09
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2010-10-20
    相关资源
    最近更新 更多