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

6

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

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的ToString()

3个回答

4
我不确定我是否理解了这个问题,但是 string.Format 的格式说明符以及字符串插值都是文本性质的 - 它们不接受变量。
你只能使用静态格式说明符:
$"{x:0000000}-{y:000}"

或者使用古老而可靠的 string.Format

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

编辑:

根据weston回答

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

1
你为什么要使用额外的参数指定 },而不是使用 }}?对我来说,string.Format("{{0:{0}}}-{{1:{1}}}", new string('0', xFormatDigitCount), new string('0', yFormatDigitCount)) 看起来完全没有问题。 - svick
从前,我遇到了一个关于 string.Format 中的 } 的问题,于是我开始遵循 建议。我已经改用字符串插值作为另一种实现你所说的方法。 - Paulo Morgado

3

有没有一种方法可以只使用字符串插值获取我的字符串,而不使用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 中它是这样的:

输入图像描述


1
对我来说,这给出的是 1 234.0000000-42.000 而不是 0001234-042。你是不是指的是 D 而不是 N - Paulo Morgado
最佳答案回答了我的问题(“我不这么认为”),并且改进了我的初始解决方案 :) 被标记为已接受的答案。您能否更新截图以避免读者的困惑? - tsemer

1
你可以在插值字符串内直接调用ToString方法。
$"{x.ToString(xStringFormat)}-{y.ToString(yStringFormat)}"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接