none
数字与字符串相互转换(求算法,函数等) RRS feed

  • 问题

  • 有这样一个需求,一张表有一个自增的Int类型的主键列,在页面显示的时候想转成4位或5位,由数字,字母,或数字加字母组成的字符串,并且要求可以逆向转换,主键列ID从1开始,最长支持到999999,各位高手有什么好的方案,可以考虑进制转换等,可以自由定义规则,谢谢!

    Leo

    2013年3月7日 7:45

答案

  • 哦,你一开始问题就没有说清楚。

    1)定义一个全局的变量Dictionary<int,string>contents,里边存放0~9数字以及映射的string。

    2)某一个数字(譬如12345),可以这样考虑:

    int num = 12345;

    string s="";

    while(num>=10)

    {

         int rest = num%10;

         s = contents[rest]+s

         num /=10;

    }

    s=contents[num]+s;

    //s就是你的结果


    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats

    • 已编辑 ThankfulHeart 2013年3月7日 10:00
    • 已标记为答案 jbhou 2013年3月12日 2:11
    2013年3月7日 9:57

全部回复

  • 你保存页面的时候还是Int类型,输出的时候可以格式化:

    string.Format("{0:00000}",num);

    进制转换:

    Convert.ToInt32("string value",2,8,10,16进制);

    参考:http://msdn.microsoft.com/zh-cn/library/1k20k614.aspx


    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats

    2013年3月7日 7:59
  • 格式化不行的,因主键ID长度是不固定的, 比方说 1 和999,怎么分别转成5位字符串,并且要求可以逆向转换的

    Leo

    2013年3月7日 8:16
  • 格式化不行的,因主键ID长度是不固定的, 比方说 1 和999,怎么分别转成5位字符串,并且要求可以逆向转换的

    Leo

    不是啊,你看我的代码,这样应该可以的。

    逆向转换,直接用Convert.ToInt32(你的string内容)就可以。

    你尝试我的方法,给出代码也可以。


    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats

    2013年3月7日 8:30
  • 谢谢你,是这样,因为我想转成5位字符串,按你的方法,string.Format("{0:00000}",num);低于等于5位的数字,可以通过补0转成5位字符串,但是如果超过5位,比如123456,格式化后还是6位。另外,需求其实是想转成字母加数字的5位字符串形式


    Leo


    • 已编辑 jbhou 2013年3月7日 9:12
    2013年3月7日 9:11
  • @但是如果超过5位,比如123456,格式化后还是6位

    对呀,你格式化应该按照最高的位数。如果显示的范围00000~99999,那么你输入超标了自然按照原样输出。

    请根据最大范围的那个定义Format。

    @另外,需求其实是想转成字母加数字的5位字符串形式

    啥意思?


    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats

    2013年3月7日 9:14
  • 其实是这样,不管是1位还是6位,甚至7位,都转成5位的形式,“需求其实是想转成字母加数字的5位字符串形式”,是想这样,是否可以通过进制转换,比如

    1 对应 A

    2 对应 B

    或者 1 对应 AAAAA,五位数格式

    规则可以自由定义的

    想通过一个算法或函数,通过传递一个数字(1~999999),无论输入的是1 还是888,还是9999 转换成5 位字符串的形式输出


    Leo

    2013年3月7日 9:23
  • 哦,你一开始问题就没有说清楚。

    1)定义一个全局的变量Dictionary<int,string>contents,里边存放0~9数字以及映射的string。

    2)某一个数字(譬如12345),可以这样考虑:

    int num = 12345;

    string s="";

    while(num>=10)

    {

         int rest = num%10;

         s = contents[rest]+s

         num /=10;

    }

    s=contents[num]+s;

    //s就是你的结果


    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats

    • 已编辑 ThankfulHeart 2013年3月7日 10:00
    • 已标记为答案 jbhou 2013年3月12日 2:11
    2013年3月7日 9:57