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

时间:2014-12-16 18:20:39

标签: c# string floating-point format

(首先:这不是Format numbers with floating points and sign in textbox in 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” ”。我想删除字符串中添加的零。

2 个答案:

答案 0 :(得分:1)

您可以使用字符串构建器来使用此代码,您会发现小数点右侧的所有零都被删除,并且在控制台中显示之前(1555454545445.20000000000000000)和之后(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());
    }

答案 1 :(得分:0)

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

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();
    }
}