.Net字符串格式化程序中的可变小数位?

时间:2011-08-18 14:15:54

标签: .net string-formatting

固定小数位很容易

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

给出

654.3

如何在C中作为参数输入小数位数? 所以

String.Format("{0:F?}", 654.321, 2);

给出

654.32

我找不到应该替换的东西?

8 个答案:

答案 0 :(得分:16)

要格式化的字符串不必是常量。

int numberOfDecimalPlaces = 2;
string formatString = String.Concat("{0:F", numberOfDecimalPlaces, "}");
String.Format(formatString, 654.321);

答案 1 :(得分:5)

使用NumberFormatInfo

Console.WriteLine(string.Format(new NumberFormatInfo() { NumberDecimalDigits = 2 }, "{0:F}", new decimal(1234.567)));
Console.WriteLine(string.Format(new NumberFormatInfo() { NumberDecimalDigits = 7 }, "{0:F}", new decimal(1234.5)));

答案 2 :(得分:3)

另一个选择是使用插值字符串,如下所示:

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

还是一团糟,但是恕我直言更加方便。请注意,字符串replaces double braces{{一样,只有一个括号。

答案 3 :(得分:0)

可能是格式化单个值的最有效方法:

int decimalPlaces= 2;
double value = Math.PI;
string formatString = String.Format("F{0:D}", decimalPlaces);
value.ToString(formatString);

答案 4 :(得分:0)

我使用类似于沃尔夫冈答案的内插字符串方法,但是更加简洁易读(IMHO):

allprojects {

gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        options.compilerArgs << "-Xlint:unchecked"
    }
}
}

答案 5 :(得分:0)

我使用了两个内插字符串(Michael's answer的变体):

{{ site.data.stocks | jsonify }}

答案 6 :(得分:-2)

使用自定义数字格式字符串Link

var value = 654.321;
var s = value.ToString("0.##");

答案 7 :(得分:-3)

使用

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

输出

  

654.32