在 C# 中使用自定义千位分隔符

发布于 2024-07-17 07:05:22 字数 186 浏览 3 评论 0原文

在显示字符串时,我尝试不使用“,”字符作为千位分隔符,而是使用空格。 我想我需要定义一种自定义文化,但我似乎做得不对。 有什么指点吗?

例如:将 1000000 显示为 1 000 000 而不是 1,000,000

(不,String.Replace() 不是我想使用的解决方案:P)

I'm trying not to use the ',' char as a thousand separator when displaying a string, but to use a space instead. I guess I need to define a custom culture, but I don't seem to get it right. Any pointers?

eg: display 1000000 as 1 000 000 instead of 1,000,000

(no, String.Replace() is not the solution I'd like to use :P)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

指尖微凉心微凉 2024-07-24 07:05:23

创建您自己的 NumberFormatInfo (派生) 具有不同的千位分隔符。

Create your own NumberFormatInfo (derivative) with a different thousand separator.

美人骨 2024-07-24 07:05:23

Jon Skeet one 有一个稍微简单的版本:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        NumberFormatInfo nfi = new NumberFormatInfo {NumberGroupSeparator = " ", NumberDecimalDigits = 0};

        Console.WriteLine(12345678.ToString("n", nfi)); // 12 345 678
    }
}

并且可以跳过“nfi”初始化并将其直接作为参数放入 ToString() 方法中。

There's a slightly simpler version of Jon Skeet one :

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        NumberFormatInfo nfi = new NumberFormatInfo {NumberGroupSeparator = " ", NumberDecimalDigits = 0};

        Console.WriteLine(12345678.ToString("n", nfi)); // 12 345 678
    }
}

And the 'nfi' initialization could be skipped and put directly as parameter into the ToString() method.

绿萝 2024-07-24 07:05:23

最简单的方法...

num.ToString("### ### ### ### ##0.00")

Easiest way...

num.ToString("### ### ### ### ##0.00")
百思不得你姐 2024-07-24 07:05:23

我想要

  • 用空格作为千​​位分隔符,
  • 最多有两位小数,并且
  • 可以选择负数。

此代码解决了这个问题:

var regex = new Regex(@"(^|(?<=-))\s*");
var format = "### ### ### ### ##0.##";
decimal number = 123456789.54m;
var str = regex.Replace(number.ToString(format), ""); // str = "123 456 789.54"

以下是不同数字的行为示例:

regex.Replace(0m.ToString(format), "")
"0"
regex.Replace(123m.ToString(format), "")
"123"
regex.Replace(123456789m.ToString(format), "")
"123 456 789"
regex.Replace(123456789.1m.ToString(format), "")
"123 456 789.1"
regex.Replace(123456789.12m.ToString(format), "")
"123 456 789.12"
regex.Replace(123456789.1234m.ToString(format), "")
"123 456 789.12"
regex.Replace((-123456789.1234m).ToString(format), "")
"-123 456 789.12"
regex.Replace((-1234m).ToString(format), "")
"-1 234"
regex.Replace((-1m).ToString(format), "")
"-1"

I wanted to

  • have space as a thousand separator,
  • have up to two decimals and
  • optionally be negative.

This code solves it:

var regex = new Regex(@"(^|(?<=-))\s*");
var format = "### ### ### ### ##0.##";
decimal number = 123456789.54m;
var str = regex.Replace(number.ToString(format), ""); // str = "123 456 789.54"

Here are examples of how this behaves for various numbers:

regex.Replace(0m.ToString(format), "")
"0"
regex.Replace(123m.ToString(format), "")
"123"
regex.Replace(123456789m.ToString(format), "")
"123 456 789"
regex.Replace(123456789.1m.ToString(format), "")
"123 456 789.1"
regex.Replace(123456789.12m.ToString(format), "")
"123 456 789.12"
regex.Replace(123456789.1234m.ToString(format), "")
"123 456 789.12"
regex.Replace((-123456789.1234m).ToString(format), "")
"-123 456 789.12"
regex.Replace((-1234m).ToString(format), "")
"-1 234"
regex.Replace((-1m).ToString(format), "")
"-1"
肥爪爪 2024-07-24 07:05:22

我建议您找到一个 NumberFormatInfo 最接近您想要的内容(即它与千位分隔符分开),请调用 Clone() ,然后设置 NumberGroupSeparator 属性。 (如果要使用货币格式设置数字格式,则需要更改 CurrencyGroupSeparator 代替/以及。)使用它作为调用 string.Format 等的格式信息,你应该没问题。 例如:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        NumberFormatInfo nfi = (NumberFormatInfo)
            CultureInfo.InvariantCulture.NumberFormat.Clone();
        nfi.NumberGroupSeparator = " ";

        Console.WriteLine(12345.ToString("n", nfi)); // 12 345.00
    }
}

I suggest you find a NumberFormatInfo which most closely matches what you want (i.e. it's right apart from the thousands separator), call Clone() on it and then set the NumberGroupSeparator property. (If you're going to format the numbers using currency formats, you need to change CurrencyGroupSeparator instead/as well.) Use that as the format info for your calls to string.Format etc, and you should be fine. For example:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        NumberFormatInfo nfi = (NumberFormatInfo)
            CultureInfo.InvariantCulture.NumberFormat.Clone();
        nfi.NumberGroupSeparator = " ";

        Console.WriteLine(12345.ToString("n", nfi)); // 12 345.00
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文