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

始终显示符号的百分比格式字符串是多少?

  •  0
  • Hong  · 技术社区  · 5 年前

    我想将0.12345显示为“+12.3%”。格式字符串“P1”或“P1”给出“12.3%”。我试过“+P1”和“+P1”都没用。

    string sFoo = 0.12345.ToString("P1");
    

    使现代化

    我应该强调,我总是想要正确的符号,而不是“+”。如果数字是-0.12345,“P1”完全符合我的要求:“-12.3%”。

    2 回复  |  直到 5 年前
        1
  •  3
  •   sellotape    5 年前

    不太有用 P1 ,但同样的结果:

    0.12345.ToString("+#.#%;-#.#%");
    

    如果您喜欢至少一个前导数字(例如“+0.23%”而不是“+23%”),请:

    0.12345.ToString("+0.#%;-0.#%"));
    

    尾随数字也一样(例如“+14.0%”而不是“+14%”):

    0.12345.ToString("+0.0%;-0.0%"));
    

    参考: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings#the--section-separator

        2
  •  1
  •   Hammad Shabbir    5 年前
        var num = 0.12345;
        var sign = num > 0 ? "+" : ""; 
        var output = $"{sign}{num.ToString("P1")}";
    
        3
  •  0
  •   Cid Gordon    5 年前

    恐怕没有显示正号的格式字符串。我查过了 NumberFormatInfo 如果一些自定义格式可以接受,但没有用。

    但是,您可以构建一些扩展方法来满足您的需求:

    public static string ToSignedPercent(this double input)
    {
        return $"{(input >= 0 ? "+" : "")}{input.ToString("P1")}";
    }
    
    // ...
    
    Console.WriteLine((0.12345).ToSignedPercent()); // +12.3%
    Console.WriteLine((-0.6789).ToSignedPercent()); // -67.9%
    

    Fiddle

        4
  •  0
  •   obiwinkenobi    5 年前

    在你的主要方法中加入以下内容。基本上,这种方法只是将变量sFoo设置为带有两个小数的百分比格式。

            string sFoo = String.Format("Value: {0:P2}.", 0.12345); // formats as 12.35% 
            Console.WriteLine(sFoo);
    
    推荐文章