避免在 C# 中的数字格式中使用额外的零

本文关键字:数字 格式 | 更新日期: 2023-09-27 18:34:32

(首先:这不是C#中用浮点格式化数字和登录文本框的副本(

我正在使用 dodald (https://stackoverflow.com/a/27510646/3179989( 的解决方案来格式化带有浮点数和符号的数字,以使它们根据浮点对齐:

textbox1.Text = String.Format("{0:+;-}{0,9:0.00000;0.00000}", number1);
textbox2.Text = String.Format("{0:+;-}{0,9:0.00000;0.00000}", number2);
textbox3.Text = String.Format("{0:+;-}{0,9:0.00000;0.00000}", number3);
textbox4.Text = String.Format("{0:+;-}{0,9:0.00000;0.00000}", number4);
textbox5.Text = String.Format("{0:+;-}{0,9:0.00000;0.00000}", number5);

它非常适合像 -1.23456 这样的数字(结果为"- 1.23456"(,但是如果数字为 1.2,那么这会将其更改为"+ 1.20000"。

问题:有没有办法避免任何额外的零?如何使用格式参数而不是使用 (text + " "( 在文本末尾添加空格?

提前致谢

编辑:澄清这一点是我正在寻找的:

-123.123456
+  1.123456
-  0.123456
-  0.123
+  1.1
- 12.123456

我有多个垂直对齐的文本框。我希望数字以上面显示的方式显示,其中浮点的位置始终是固定的并垂直对齐。dodald (https://stackoverflow.com/a/27510646/3179989( 提供的解决方案仅适用于具有五个十进制数字的数字,例如 -1.23456(结果为"- 1.23456"(,但是如果数字为 1.2,那么他的解决方案会将其更改为"+ 1.20000"。我想删除字符串中添加的零。

避免在 C# 中的数字格式中使用额外的零

您可以使用字符串生成器使用此代码,您会发现小数点右侧的所有零都已删除,这显示在控制台中 (155545454545.2000000000000000000( 之前和之后 (1555454545445.2(:

    static void Main(string[] args)
    {
        string input = "1555454545445.20000000000000000";
        StringBuilder sb = new StringBuilder(input);
        for (int i = 0; i < input.Length-2; i++)
        {
            if (input[i] == '.')
            {
                if (input[input.Length - 1] == '0')
                {
                    for (int x = 0; x < input.Length - i; i++)
                    {
                        if (sb[sb.Length - 1] == '0') 
                        {
                            sb = sb.Remove((sb.Length - 1), 1);
                        }
                    }
                }
            }
        }
        Console.WriteLine(input);
        Console.WriteLine(sb.ToString());
    }

您还可以使用此代码通过正则表达式删除小数点右侧的任何其他零:

class MainProgram
{
    public static void Main(string[] args)
    {
        decimal DNumber = 1223456.45600000M;
        Console.WriteLine("Original Decimal Number = {0}, Decimal Number Without Zeros = {1}", DNumber, DNumber.ToString("#.##############"));
        Console.Read();
    }
}