如何在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列。

如何在C#中获得数字字符串的最小值和最大值

将其转换为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