如何在C#中获得数字字符串的最小值和最大值
本文关键字:字符串 数字字符 最小值 最大值 数字 | 更新日期: 2023-09-27 18:16:18
正如您在代码中看到的,它使用了几个if条件来实现所需的结果。我只包含了具有相同模式的部分代码。目前,IdString值可以介于"0"到"99999"之间。以后它可能会更大。如果发生这种情况,我们必须再次更改代码。
private string GetPrefix(string IdString)
{
string returnString = string.Empty;
if (IdString >= 0 && IdString < 1000)
{
returnString = "00000";
}
else if (IdString >= 1000 && IdString < 2000)
{
returnString = "00001";
}
else if (IdString >= 2000 && IdString < 3000)
{
returnString = "00002";
}
//重复相同的模式……….
else if (IdString >= 49000 && IdString < 50000)
{
returnString = "00049";
}
//重复相同的模式……
else if (IdString >= 99000 && IdString < 100000)
{
returnString = "00099";
}
else
{
returnString = "00000";
}
return returnString;
}
与其这样做,我想有一个函数可以做同样的事情。我用下面的方法试了一下,但没能起作用。伪代码:
private string ShortFunction(string IdString)
{
string returnString = string.Empty;
if (Information.IsNumeric(IdString))
{
int intStrId = Convert.ToInt32(IdString);
int thousandValueOfIdString = HowToExtractFromIdString();//???
if (IdString > thousandValueOfIdString && IdString < thousandValueOfIdString + 1000)
{
returnString = String.Format("????:", thousandValueOfIdString); //eg. "00050";
}
}
return returnString;
}
有人能给我一个主意吗?
注意:我正在更新从以前的开发人员那里继承的代码。在过去的两年里,由于IdString的增加超过了假设值,原始代码被修改了好几次。当我跟踪时,我发现这个IdString来自SQLServer2008中自动递增的bigint列。
将其转换为int
,执行整数除法(去掉小数部分(,并使用D
数字格式字符串填充字符串:
return (Convert.ToInt32(IdString) / 1000).ToString("D5");
输出:
1000 -> 00001
如果数字超过99999,您可以增加D5
中的数字5以添加更多前导零,也可以保持原样。
@GrantWinney。总是在左边打三个0。
在这种情况下,如果你想要至少三个零作为填充,我会把它分成两行代码。我使用Math.Max方法在较小的数字上提供5个零,但在较大的数字上至少提供3个零。
var thous = (Convert.ToInt32(IdString) / 1000).ToString();
return thous.PadLeft(Math.Max(5, thous.Length + 3), '0');
输出:
1000 -> 00001
22500 -> 00022
999999 -> 000999
private String ShortFunction(string IdString)
{
Int32 id = Int32.Parse(IdString); // Convert input to a workable numeric value
Int32 outputInt = id / 1000; // Obtain the thundsand value you after
String outputString = outputInt.ToString().PadLeft(5, '0'); // Convert the output number to desired string format
return outputString;
}
建议方法说明:
- 您可能需要对边缘情况进行扩展以进行输入验证(例如IdString包含负值(
- 我使用的Int32只能处理2147483647
- 如果输入值包含大于100000000,则输出将超过5个字符的字符串值
您可以将IdString
转换为int
,然后去掉最后3位
像这个
int number = int.Parse(IdString);
int result = (number - (number%1000))/1000;
只有number/1000
也有效,但我不太喜欢这种做法,所以我避免了。
if(result >100)
return "00000"; //check the last case
然后,将其转换回String
return result.ToString("D5"); //this gives you the number with 5 digits