我如何在C#中用空格分隔数千个

假设我有以下十进制数,我必须格式化,以便每千个应该用空格分隔:

897.11 to 897.11 1897.11 to 1 897.11 12897.11 to 12 897.11 123897.11 to 123 897.11 

我试过Decimal.ToString(“0 000.00”)。 虽然这个数字是1897.11时效果很好。 但是当它是897.11时我得到0 897.11。

使用自定义NumberGroupSeparator属性传递自定义NumberFormatInfo ,并使用#,#格式告诉它执行数字组。 此示例使用不变文化的数字格式作为其基础。

 var nfi = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone(); nfi.NumberGroupSeparator = " "; string formatted = 1234897.11m.ToString("#,0.00", nfi); // "1 234 897.11" 

您需要一个自定义数字格式提供程序,您可以自己更改字符:

  static void Main(string[] args) { decimal d = 2000000; var f = new NumberFormatInfo {NumberGroupSeparator = " "}; var s = d.ToString("n", f); // 2 000 000.00 } 

在这里我还指定将其格式化为数字(使用"n" ),请参阅此链接以获取其他格式选项:

标准数字格式字符串

在这种情况下,如果您将格式设置为货币或百分比,它将无法工作,因为您可能已经注意到NumberFormatInfo具有单独的属性。

可以在System.Globalization.CultureInfo.CurrentCulture.NumberFormat上找到当前的文化格式信息。

使用自定义格式字符串 ,但使用’#’不是’0是0是一个强制令牌它将在那里无论数字有多长,井号(#)是可选令牌,它只会用于数字实际上在号码。

  Decimal.ToString("# ###.00") 

注意。 我会把它留在这里,但@Tim S的回答是更好的。

当我尝试这个时,我看到它只生成第一个分隔符…我想分隔符只适用于逗号和句点。 作为一种解决方法(最多可达到您期望的最大大小),请尝试使用此方法。

  Decimal.ToString("# ### ### ### ###.00") 

试试这个

 int testNumber = 134566548; Console.WriteLine(string.Format("{0:N}", testNumber)); 

您将收到:134 566 548,00

不要忘记你的文化。

挪威语语言环境使用空格作为分隔符,因此如果您专门为挪威人设计网站或应用程序,则可以使用:

 (123897.11).ToString("n",new CultureInfo("nb-NO")) 

结果如何

 "123 897,11" 

显然,如果你没有为挪威市场编写申请,那么这将是一个愚蠢的解决方案。