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

时间:2013-07-08 13:25:54

标签: c# decimal custom-formatting

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

 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。

6 个答案:

答案 0 :(得分:57)

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

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

答案 1 :(得分:17)

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

    static void Main(string[] args)
    {
        decimal d = 2000000;

        var f = new NumberFormatInfo {NumberGroupSeparator = " "};

        var s = d.ToString("n", f); // 2 000 000.00
    }

此处我还指定将其格式化为数字(使用"n"),请参阅此链接以了解其他格式选项:

Standard Numeric Format Strings

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

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

答案 2 :(得分:6)

使用custom format string,但使用'#'不是'0是0是强制令牌,无论数字多久,井号(#)都是可选令牌,它只会用于数字中的实际数字。

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

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

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

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

答案 3 :(得分:6)

试试这个

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

您将收到: 134 566 548,00

不要忘记你的文化。

答案 4 :(得分:3)

瑞典将千位分隔符用作Space(“”),将小数点分隔符用作逗号(,)。我们可以通过以下方式实现这一目标。

decimal myNumbber = 5878.476M;
var swedishCulture = new CultureInfo("sv-SE");           
swedishCulture.NumberFormat.NumberDecimalSeparator = ",";
swedishCulture.NumberFormat.NumberGroupSeparator = " ";
var s = myNumbber.ToString("#,###.00", swedishCulture);

哪个给出输出

"5 878,48"

答案 5 :(得分:1)

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

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

结果是

"123 897,11"

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