【问题标题】:Format decimal for percentage values?百分比值的格式小数?
【发布时间】:2010-12-19 22:39:40
【问题描述】:

我想要的是这样的:

String.Format("Value: {0:%%}.", 0.8526)

%% 是格式提供程序或我要查找的任何内容。 结果应该是:Value: %85.26.

我基本上需要它来进行 wpf 绑定,但首先让我们解决一般格式问题:

<TextBlock Text="{Binding Percent, StringFormat=%%}" />

【问题讨论】:

    标签: c# decimal string.format formatprovider


    【解决方案1】:

    使用P format string。这会因文化而异:

    String.Format("Value: {0:P2}.", 0.8526) // formats as 85.26 % (varies by culture)
    

    【讨论】:

    • Looking at here big difference is like US and France type. 如果上述内容因文化而异,是否存在独立于文化的P 格式?
    • @bonCodigo:如果您想要特定文化的输出,请明确指定文化。
    • 那么我如何以文化敏感形式格式化百分比值但带有符号,以便将 0.123 格式化为“+12.3%”,在 tr_TR 语言环境中格式化为“+%12.3”?
    【解决方案2】:

    如果您有充分的理由搁置与文化相关的格式并明确控制值和“%”之间是否有空格,以及“%”是前导还是尾随,您可以使用NumberFormatInfo 的 PercentPositivePatternPercentNegativePattern 属性。

    例如,要获取一个尾随“%”且值与“%”之间没有空格的十进制值:

    myValue.ToString("P2", new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 });
    

    更完整的例子:

    using System.Globalization; 
    
    ...
    
    decimal myValue = -0.123m;
    NumberFormatInfo percentageFormat = new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 };
    string formattedValue = myValue.ToString("P2", percentageFormat); // "-12.30%" (in en-us)
    

    【讨论】:

      【解决方案3】:

      如果您想使用一种允许您保留数字的格式,就像您的条目一样,这种格式适用于我: "# \\%"

      【讨论】:

        【解决方案4】:

        此代码可能对您有所帮助:

        double d = double.Parse(input_value);
        string output= d.ToString("F2", CultureInfo.InvariantCulture) + "%";
        

        【讨论】:

        • 在没有 Culture.InvariantCulture 的情况下为我工作
        【解决方案5】:

        设置你的文化和“P”字符串格式。

        CultureInfo ci = new CultureInfo("en-us");
        double floating = 72.948615;
        
        Console.WriteLine("P02: {0}", (floating/100).ToString("P02", ci)); 
        Console.WriteLine("P01: {0}", (floating/100).ToString("P01", ci)); 
        Console.WriteLine("P: {0}", (floating/100).ToString("P", ci)); 
        Console.WriteLine("P1: {0}", (floating/100).ToString("P1", ci));
        Console.WriteLine("P3: {0}", (floating/100).ToString("P3", ci));
        

        输出:

        “P02:72.95%”

        “P01:72.9%”

        “P:72.95%”

        “P1:72.9%”

        “P3:72.949%”

        【讨论】:

          【解决方案6】:

          我发现上述答案是最佳解决方案,但我不喜欢百分号前的前导空格。我见过有些复杂的解决方案,但我只是在上面的答案中使用了这个 Replace 补充,而不是使用其他舍入解决方案。

          String.Format("Value: {0:P2}.", 0.8526).Replace(" %","%") // formats as 85.26% (varies by culture)
          

          【讨论】:

          • 仍然错了,如果你想强制输入这么多,你可以把数字作为浮点数并添加百分号,因为替换是昂贵的,在这种情况下不是很有用 "String.Format( "值:{0:F2}。", 0.8526*100)"
          猜你喜欢
          • 1970-01-01
          • 2015-07-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-16
          • 2017-07-18
          相关资源
          最近更新 更多