【问题标题】:String.Format an integer to use a thousands separator without decimal places or leading 0 for small integersString.Format 一个整数以使用不带小数位的千位分隔符或小整数前导 0
【发布时间】:2021-11-18 03:27:22
【问题描述】:

愚蠢的问题,我想格式化一个整数,使其与 1000 的分隔符 (,) 一起出现,但也没有小数位且没有前导 0。

到目前为止,我的尝试是:

String.Format("{0} {1}", 5, 5000);            // 5 5000
String.Format("{0:n} {1:n}", 5, 5000);        // 5.00 5,000.00
String.Format("{0:0,0} {1:0,0}", 5, 5000);    // 05 5,000

我追求的输出是:

5 5,000

我有什么明显的遗漏吗?

【问题讨论】:

  • 对于那些查找此答案的人:请记住,其他文化可能会为千位分隔符返回一个点 (.)。因此,请确保您将在哪里使用此字符串并正确解析它。

标签: c# string-formatting


【解决方案1】:

这对我有用。

String.Format("{0:#,0} {1:#,0}", 5, 5000); // 5 5,000

【讨论】:

  • System.String.Format("Bla: {0:#,##0;(- #,##0)}", 803000000.656)
  • 如果没有四舍五入:System.String.Format("Bla: {0:#,##0;(- #,##0)}", Floor(803000000.456))
【解决方案2】:

试试这个:-

String.Format("{0:n0}",5000) // 5,000
String.Format("{0:n0}",5) // 5
String.Format("{0:n0}",0) // 0

【讨论】:

  • 这个有教养吗?即,是否会使用正确的千位分隔符?
  • 是的,如果你没有提供 FormatProvider 那么 String.Format 使用当前的文化信息。因此,如果您将数字分组符号(千位分隔符)从 , 更改为 - 那么结果将是 5-000 而不是 5,000
  • 这是迄今为止最好的解决方案,因为它考虑了用户文化!非常感谢!
【解决方案3】:
String.Format("{0:#,0} {1:#,0}", 5, 5000); // "5 5,000"
  • 0 在格式字符串中表示将属于此处的数字,否则 [前导/尾随] 零 [使事物对齐等]。编辑:你肯定会想要一个作为模式中的最后一个数字,否则零值将呈现为空字符串
  • # 表示除非此处有有效数字,否则不要将任何内容放入输出中。

编辑(感谢@eulerfx):

  • 最后一部分必须是 0 而不是 #(就像我最初拥有的那样),否则零值将呈现为长度为零的字符串。

【讨论】:

  • # 并没有真正在任何地方放置空格吗?我认为如果没有数字可以放在那里,它什么也没做......
  • 当数字为0时返回一个空字符串。
【解决方案4】:

试试

String.Format("{0:#,#}", 4000);

【讨论】:

  • 查看@eulerfx 对我的回答的评论
【解决方案5】:

这也有效:

40000.ToString("#,#")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    相关资源
    最近更新 更多