显示尾随零,除了整数

时间:2010-02-01 13:40:13

标签: c# .net

在使用.ToString("...")时,是否有一种方法(在.NET中)从数字中删除尾随零,但如果数字不是整数则显示为2位小数:

  1. (12345.00).ToString(...)应显示为12345
  2. (12345.10).ToString(...)应显示为12345.10
  3. (12345.12).ToString(...)应显示为12345.12
  4. 是否有1个数字格式字符串可以在所有这些场景中使用?

    .ToString("#.##")几乎可以正常工作但不会显示方案2的结尾0 ...

    此外,其他文化不是问题,我只想要小数点(不是逗号等)

8 个答案:

答案 0 :(得分:6)

这些方面的东西?

            if (number % 1 == 0)
                Console.WriteLine(string.Format("{0:0}", number));
            else
                Console.WriteLine(string.Format("{0:0.00}", number));

修改

此代码中有一个小错误:) 1.001将打印为“1.00”...这可能不是您想要的,如果您需要打印1.001为“1”,您需要更改如果(...)测试检查有限公差。由于这个问题更多的是关于格式化,我将保持答案不变,但在生产代码中你可能想要考虑这种问题。

答案 1 :(得分:2)

肮脏的方式:

string.Format("{0:0.00}", number).Replace(".00","")

答案 2 :(得分:1)

不是一种格式,但它适合一行:

double a = 1.0;
string format = string.Format((a == (int)a) ? "{0:0}" : "{0:0.00}", a);

答案 3 :(得分:0)

我不能说我遇到了一个能做到这一点的面具。我会用

string output = (value % 1 > 0) ? String.Format("{0:0.00}", value) : String.Format("{0:0.##}", value);

答案 4 :(得分:0)

我猜你可以用你自己的方法来制作那个显示器,因为它是否是一个整数的条件。

public static class Extensions
{
    public static string ToCustomString(this decimal d)
    {
        int i = (int)d;
        if (i == d)
            return i.ToString();

        return d.ToString("#.00");
    }
}

答案 5 :(得分:0)

如果您想使用它来显示货币,可以使用以下

float fVal = 1234.20f;
String strVal = fVal.Tostring("c");

答案 6 :(得分:0)

您可以编写这样的扩展方法来为您进行格式化:

public static string FormatNumberString(this double input)
    {
        int temp;
        string inputString = input.ToString();
        return Int32.TryParse(inputString, out temp) ? inputString : input.ToString("0.00");
    }

答案 7 :(得分:0)

如果您希望在ASP MVC Razor中执行此操作,那么您可以试试这个

@string.Format(item.DecimalNumber % 1 == 0 ? "{0:0}" : "{0:0.00}", item.DecimalNumber)  

这将表现如下:

值:2.5 - >显示:2.50

值:5 - >显示:5

价值:2.45 - >显示:2.45