如果需要这样,我为前缀为0的整数构建了一个字符串:
// myInt as input, for example: 101;
List<string> sList = new List<string>();
string format = "00#"; // how to build format dynamicall?
for(int i= 1; i <= myInt; i++)
{
sList.Add(i.ToString(format));
}
预期结果应为:
001
002
...
010
...
101
如果我的整数是10或1000,我该如何动态构建格式?
答案 0 :(得分:11)
"#".PadLeft(desiredWidth, '0')
你可以从desiredWidth
获得myInt.ToString().Length
- 有点粗鲁,但它会起作用:)
换句话说:
List<string> sList = new List<string>();
string format = "#".PadLeft(myInt.ToString().Length, '0');
for(int i= 1; i <= myInt; i++)
{
sList.Add(i.ToString(format));
}
或者你可以完全跳过格式字符串:
List<string> sList = new List<string>();
int desiredWidth = myInt.ToString().Length;
for(int i= 1; i <= myInt; i++)
{
sList.Add(i.ToString().PadLeft(desiredWidth, '0'));
}
答案 1 :(得分:3)
如何使用standard numeric format strings?
List<string> sList = new List<string>();
string format = string.Format("D{0}", myInt.ToString().Length);
for(int i= 1; i <= myInt; i++)
{
sList.Add(i.ToString(format));
}
答案 2 :(得分:2)
您可以使用带有ceil的log base 10来获取数字的数字长度。
int i = 123;
int len = Convert.ToInt32(Math.Ceiling(Math.Log10(i)));
由于C#可以隐式地将int转换为double,因此它应该是可靠的。然后你可以避免字符串转换。
我没有在int上对ToString()进行基准测试,但似乎可能会更好。
答案 3 :(得分:1)
您不需要使用“00#”,“000”也可以完成同样的工作。
// myInt as input, for example: 101;
List<string> sList = new List<string>();
string format = new string('0', myInt.ToString().Length);
for(int i= 1; i <= myInt; i++)
{
sList.Add(i.ToString(format));
}