使用字符串插值内的变量指定小数位

时间:2016-01-07 12:00:14

标签: c# string-interpolation c#-6.0

我有一个字符串格式,其中包含两个整数变量,每个变量都需要格式化为可变长度:

int x = 1234;
int y = 42;

// Simplified, real values come from method outputs, so must use the variables:
int xFormatDigitCount = 7;
int yFormatDigitCount = 3; 

var xStringFormat = new string('0', xFormatDigitCount); // "0000000"
var yStringFormat = new string('0' ,yFormatDigitCount); // "000"

现在我只能使用整数变量'设法获得所需的格式。 .ToString()方法:

var xString = x.ToString(xStringFormat);
var yString = y.ToString(yStringFormat);
return $"{xString}-{yString}";

但这似乎是一种开销,因为字符串插值支持格式{var:format}。有没有办法让我的字符串只使用字符串插值,而不使用x和y' s ToString()

3 个答案:

答案 0 :(得分:3)

我不确定我是否理解这个问题,但是string.Format的格式说明符,因此字符串插值是文本的 - 它们不接受变量。

您可以使用静态格式说明符:

$"{x:0000000}-{y:000}"

或诉诸好老string.Format

string.Format(
    $"{{0:{new string('0', xFormatDigitCount)}}}-{{1:{new string('0', yFormatDigitCount)}}}",
    x,
    y);

修改

基于weston' answer

$"{x.ToString($"D{xFormatDigitCount}")}-{y.ToString($"D{yFormatDigitCount}")}"

答案 1 :(得分:2)

  

有没有办法让我的字符串只使用字符串插值,而不使用x和y的ToSTring()

我不相信,但由于ToString("Dx")

,它可以更加清晰

一体化(嵌套插值):

public string Format(int x, int y, int xDigitCount, int yDigitCount)
{
    return $"{x.ToString($"D{xDigitCount}")}-{y.ToString($"D{yDigitCount}")}";
}

Stack Overflow语法高亮显示无法跟上,所以它看起来很奇怪,但这就是它在VS中的样子:

enter image description here

答案 2 :(得分:1)

您可以在插值字符串中调用ToString方法。

$"{x.ToString(xStringFormat)}-{y.ToString(yStringFormat)}"