【问题标题】:add commas using String.Format for number and使用 String.Format 为数字添加逗号和
【发布时间】:2011-02-02 11:45:36
【问题描述】:

使用 String.Format 如何确保所有数字在每 3 位数字后都有逗号 例如 23000 = "23,000" 并且 0 返回 "0"。

String.Format("{0:n}", 0); //给出我不想要的 0.00。 我不想要任何小数位,所有数字都是整数。

【问题讨论】:

  • 你不应该使用逗号来分隔数字,你应该使用(软)空格。原因是在世界的大部分地区 (en.wikipedia.org/wiki/File:DecimalSeparator.png),逗号是小数点分隔符(小数点),因此逗号的含义是主观的,取决于上下文 - 请参阅 Wikipedia en.wikipedia.org/wiki/Decimal_separator#Digit_grouping
  • 您不应硬编码逗号,而应使用区域设置或国际化千位分隔符。如果您愿意,可以在未设置区域设置时使用逗号作为默认值。

标签: c#


【解决方案1】:

你可以这样做,我觉得阅读意图更清晰:

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

例子:

string.Format("{0:#,###0}", 123456789); // 123,456,789
string.Format("{0:#,###0}", 0); // 0

【讨论】:

  • 我相信这不一定会使用逗号作为千位分隔符,具体取决于语言环境
【解决方案2】:

如果您当前的文化设置使用逗号作为千位分隔符,您可以将其格式化为小数点为零的数字:

String.Format("{0:N0}", 0)

或者:

0.ToString("N0")

【讨论】:

    【解决方案3】:

    来自msdn

    double value = 1234567890;
    Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
    

    显示 1,234,567,890

    【讨论】:

    • 当心这个:它会为 value=0 生成一个空字符串,这肯定是 OP 想要的。相反,使用“#,0”作为模式就可以了。
    【解决方案4】:

    如果其他解决方案都不适合您,您也可以尝试使用 CultureInfo 对象:

            var x = CultureInfo.CurrentCulture;
            x.NumberFormat.NumberDecimalSeparator = ",";
            x.NumberFormat.NumberDecimalDigits = 0;
            x.NumberFormat.NumberGroupSizes = new int[] {3};
    

    【讨论】:

      【解决方案5】:

      你可以在 N 后面放一个数字来指定小数位数:

      String.Format("{0:n0}", 0) // gives 0
      

      【讨论】:

        【解决方案6】:

        我标记了另一个答案,然后发现零值是一个空字符串。

                System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("de-DE");
                System.Threading.Thread.CurrentThread.CurrentCulture = ci;
        
                double x = 23232323.21;
                string y = x.ToString("#,0", System.Globalization.CultureInfo.CurrentCulture);
        

        字符串以当前文化返回,即德语,因此 y = 23.232.323

        当 x = 0 时,y = 0。

        【讨论】:

          【解决方案7】:

          你就是这样说的:

          Console.WriteLine(**$**"Your current amount of money is: **{yourVar:c}**");
          

          【讨论】:

            【解决方案8】:

            相对美国的序数。

            using static System.Threading.Thread;
            
            public static string NumberToOrdinal(int number, CultureInfo? culture = null)
            {
                var numberString = number.ToString(
                    format: "#,0",
                    provider: culture ?? CurrentThread.CurrentCulture);
                // Examine the last 2 digits.
                var lastDigits = number % 100;
                // If the last digits are 11, 12, or 13, use th. Otherwise:
                if (lastDigits is >= 11 and <= 13) return $"{numberString}th";
                // Check the last digit.
                return (lastDigits % 10) switch
                {
                    1 => $"{numberString}st",
                    2 => $"{numberString}nd",
                    3 => $"{numberString}rd",
                    _ => $"{numberString}th",
                };
            }
            

            ps 我从不评论这些事情,因为堆栈溢出不会让我这样做,有时它不值得为每个人提供一个新的答案来稍微改进一下。螺丝stackoverflow。我已经在这里多年了,但仍然无法发表评论——这就是我仍然不发帖的原因。

            【讨论】:

              猜你喜欢
              • 2010-09-11
              • 1970-01-01
              • 1970-01-01
              • 2012-11-20
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多