代码之家  ›  专栏  ›  技术社区  ›  David_001

显示尾随零,整数除外

  •  8
  • David_001  · 技术社区  · 16 年前

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

    1. (12345.00).ToString(…)应显示为12345
    2. (12345.10).ToString(…)应显示为12345.10
    3. (12345.12).ToString(…)应显示为12345.12

    是否有1个数字格式字符串可用于所有这些方案?

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

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

    8 回复  |  直到 13 年前
        1
  •  6
  •   Steve    16 年前

    沿着这条线?

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

        2
  •  2
  •   bendataclear    13 年前

    肮脏的方式:

    string.Format("{0:0.00}", number).Replace(".00","")
    
        3
  •  1
  •   Carra    16 年前

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

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

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

    string output = (value % 1 > 0) ? String.Format("{0:0.00}", value) : String.Format("{0:0.##}", value);
    
        5
  •  0
  •   Dynami Le Savard    16 年前

    我想您可以使用自己的方法来生成该显示,因为它取决于它是否为整数。

    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");
        }
    }
    
        6
  •  0
  •   MRG    16 年前

    如果要使用它来显示货币,可以使用以下命令

    float fVal = 1234.20f;
    String strVal = fVal.Tostring("c");
    
        7
  •  0
  •   Keith Rousseau    16 年前

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

    public static string FormatNumberString(this double input)
        {
            int temp;
            string inputString = input.ToString();
            return Int32.TryParse(inputString, out temp) ? inputString : input.ToString("0.00");
        }
    
        8
  •  0
  •   Matty Bear    13 年前

    如果您希望在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

    推荐文章