首页 文章

显示尾随零,除了整数

提问于
浏览
8

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

  • (12345.00).ToString(...)应显示为12345

  • (12345.10).ToString(...)应显示为12345.10

  • (12345.12).ToString(...)应显示为12345.12

是否有1个数字格式字符串可以在所有这些场景中使用?

.ToString("#.##") 几乎可以工作,但没有显示方案2的尾随0 ...

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

8 回答

  • 2

    沿着这些方向的东西?

    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”你需要更改if( . ..)测试检查有限公差 . 由于这个问题更多的是关于格式化,我将保持答案不变,但在 生产环境 代码中你可能想要考虑这种问题 .

  • 0

    脏的方式:

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

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

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

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

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

    我猜你可以用你自己的方法来产生那个显示,因为它是否是一个整数的条件 .

    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");
        }
    }
    
  • 0

    如果要使用它来显示货币,可以使用以下内容

    float fVal = 1234.20f;
    String strVal = fVal.Tostring("c");
    
  • 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");
        }
    
  • 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

相关问题