【问题标题】:Numbers formatting in C#C#中的数字格式
【发布时间】:2013-05-21 12:30:30
【问题描述】:

我有这样的数字: -1.0001 -10000.01

我需要得到这个: -1.0001 -10000,01

要求: - 小数分隔符是“,” - 组分隔符是“” - 逗号后面的数字的一部分可以有不同的长度,这取决于实际数据。

我尝试使用此掩码:“### ### ##0.####”来格式化数字。 当数字很大时-一切都很好,但是当它很小时-我从数字的左侧得到空格。我明白了: “- 1,0001” “- 10 000,01”

据我了解,这些空格来自我使用的掩码。

有一些解决方法,但它们不是那么漂亮和美观。

有什么方法可以正确地做到这一点吗?

谢谢!

【问题讨论】:

  • 我真的不清楚你想做什么。是什么 ”。”如果您使用逗号作为小数分隔符并使用空格作为组分隔符,则意味着在您想要的输出中?

标签: c# formatting numbers


【解决方案1】:

尝试使用 NumberFormatInfo 类来格式化您的号码。我使用下面的代码来检查我的答案,它适用于我测试过的大/小案例:

    static void Main(string[] args)
    {
        double smallNumber = -1.01;
        double smallNumberMoreDigits = -1.0001;
        double bigNumber = -100000.001;
        double longNumber = 2.2347894612789;

        Thread.CurrentThread.CurrentCulture = new CultureInfo("ru", false);            

        Console.Out.WriteLine(smallNumber.ToString("#,0.####"));
        Console.Out.WriteLine(smallNumberMoreDigits.ToString("#,0.####"));
        Console.Out.WriteLine(bigNumber.ToString("#,0.####"));
        Console.Out.WriteLine(longNumber.ToString("#,0.####"));

        Console.Read();
    }

编辑: 快速的侦探工作(我查看了您的个人资料)告诉我您在俄罗斯。您在寻找通用俄语数字格式吗?我已经更改了上面的代码。看看它是否符合您的要求。它给了我以下结果:

-1,01 -1,0001 -100000,001

第二次编辑: 添加了掩码以获得更好的小数位结果。

【讨论】:

  • 我忘了说我也试过 NumberFormatInfo,但它没有用,因为我忘了设置它的 NumberDecimalDigits 属性。
  • 我错过了一些东西。例如,如果 smallNumber 变量 = -1.01,我得到 -1,0100。这不是预期的。预计 -1,01。
  • 我认为这一切都是因为 NumberFormatInfo 的工作原理就像 smallNumber.Format("N4");
  • 我已经用另一种方法更新了我的答案。让我知道它是否适合您。
  • 当我使用“G”修饰符时,长数字(例如 2.2347894612789 )存在一些问题。它们根据数字的类型进行四舍五入,有时数字太长。我的意思是我不能将尾随部分长度设置为特定长度。我只能设置整数的长度。不舒服。这种方式不够灵活。但它给出了结果。
【解决方案2】:

当您发布时,stackoverflow 会自动删除空格,但我认为您可以通过使用 Trim 来解决您的问题

something.ToString("### ### ##0.####").Trim();

【讨论】:

  • 如果数字是正数会有所帮助。当他们是负面的时,它不会起作用。
  • 有一种解决方法来格式化输入数字。如果它是负数 - 将其设为正数,然后使用 Trim() 应用蒙版,然后在开头添加减号。它运作良好,但对我来说似乎很奇怪。
猜你喜欢
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多