variable decimal places in .Net string formatters?

后端 未结 8 1506
感动是毒
感动是毒 2020-12-29 04:49

Fixed decimal places is easy

String.Format(\"{0:F1}\", 654.321);

gives

654.3

How do I feed the number of

相关标签:
8条回答
  • 2020-12-29 05:28

    I use an interpolated string approach similar to Wolfgang's answer, but a bit more compact and readable (IMHO):

    using System.Globalization;
    using NF = NumberFormatInfo;
    
    ...
    
    decimal size = 123.456789;  
    string unit = "MB";
    int fracDigs = 3;
    
    // Some may consider this example a bit verbose, but you have the text, 
    // value, and format spec in close proximity of each other. Also, I believe 
    // that this inline, natural reading order representation allows for easier 
    // readability/scanning. There is no need to correlate formats, indexes, and
    // params to figure out which values go where in the format string.
    string s = $"size:{size.ToString("N",new NF{NumberDecimalDigits=fracDigs})} {unit}";
    
    0 讨论(0)
  • 2020-12-29 05:34

    use

    string.Format("{0:F2}", 654.321);
    

    Output will be

    654.32

    0 讨论(0)
  • 2020-12-29 05:35

    The string to format doesn't have to be a constant.

    int numberOfDecimalPlaces = 2;
    string formatString = String.Concat("{0:F", numberOfDecimalPlaces, "}");
    String.Format(formatString, 654.321);
    
    0 讨论(0)
  • 2020-12-29 05:40

    Use the custom numeric format string Link

    var value = 654.321;
    var s = value.ToString("0.##");
    
    0 讨论(0)
  • 2020-12-29 05:46

    Another option is using interpolated strings like this:

    int prec = 2;
    string.Format($"{{0:F{prec}}}", 654.321);
    

    Still a mess, but yet more convenient IMHO. Notice that string interpolation replaces double braces, like {{, with a single brace.

    0 讨论(0)
  • 2020-12-29 05:46

    I used two interpolated strings (a variant of Michael's answer):

    double temperatureValue = 23.456;
    int numberOfDecimalPlaces = 2;
    
    string temperature = $"{temperatureValue.ToString($"F{numberOfDecimalPlaces}")} \u00B0C";
    
    0 讨论(0)
提交回复
热议问题