麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

C# 10進制與62進制互轉 數據大無壓力 10進制與72,96進制任意轉換

2019-11-17 03:26:34
字體:
來源:轉載
供稿:網友

因項目需要把10進制的ID轉換成62進制的字符串,分享給別人。

于是在網上搜索了很多算法,但都未能滿足需要,項目里的ID是固定算法算出來的18~20位數據的ulong整型。

如:17223472272256398107,509488277152981097。

 

網上找的算法問題在于,將ulong的值轉換62進制的字符串后,再將字符串轉換成ulong值時會不準確。

于是各種測試與假象問題所在,最后確定算法確實沒有問題,于是開始懷疑數據類型的問題。

果然,原因是使用了Math.Pow(double x,double y)(該方法計算x的y次方的值),double和float的精度只能精確到小數后面7位,但是我算法里沒有用到小數,所以問題應該是在于Pow方法,估計應該是內部實現,可能會以冪的形式來計算,所以如果數據大了,以冪的形式表示超出7位的會出現類似int的計算方法。

 

所以重新寫了Pow方法,果然問題解決了。重新改寫的方法最大值可以支持到decimal的最大值(79228162514264337593543950335),28位。

理論上是可以支持無限大的數值的,只是要改寫decimal類型。

直接上代碼吧:

復制代碼
  public class Converter    {        PRivate static String keys = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";//編碼,可加一些字符也可以實現72,96等任意進制轉換,但是有符號數據不直觀,會影響閱讀。        private static int exponent = keys.Length;//冪數        /// <summary>        /// ulong value type to 62 string        /// </summary>        /// <param name="value">The max value can not more decimal.MaxValue<</param>        /// <returns>Return a specified 62 encode string</returns>        public static string Decimal2Str(decimal value)//17223472558080896352ul        {            string result = string.Empty;            do            {                decimal index = value % exponent;                result = keys[(int)index] + result;                value = (value - index) / exponent;            }            while (value > 0);            return result;        }        /// <summary>        /// 62 encode string to decimal        /// </summary>        /// <param name="value">62 encode string</param>        /// <returns>Return a specified decimal number that decode by 62 string</returns>        public static decimal Str2Decimal(string value)//bUI6zOLZTrj        {            decimal result = 0;            for (int i = 0; i < value.Length; i++)            {                int x = value.Length - i - 1;                result += keys.IndexOf(value[i]) * Pow(exponent, x);// Math.Pow(exponent, x);            }            return result;        }        /// <summary>        /// 一個數據的N次方        /// </summary>        /// <param name="x"></param>        /// <returns></returns>        private static decimal Pow(decimal baseNo, decimal x)        {            decimal value = 1;////1 will be the result for any number's power 0.任何數的0次方,結果都等于1            while (x > 0)            {                value = value * baseNo;                x--;            }            return value;        }    }
復制代碼

 

這位朋友的數據類型解說的比較詳細,參見:http://www.companysz.com/Lxiaojiang/p/3631371.html

PS: Google的強力封殺,再次讓我憎恨某一類人,某一些事情。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天天草天天干天天 | 国产资源在线观看视频 | 国产羞羞视频在线观看免费应用 | 成人午夜免费国产 | 日韩视频区 | 在线亚洲欧美 | 九九精品免费 | 免费国产一区二区视频 | 亚洲成年人免费网站 | 成人免费福利视频 | 午夜视频在线 | 国产精品啪一品二区三区粉嫩 | 国产精品美女一区二区 | 福利一区二区三区视频在线观看 | 福利在线播放 | 素人视频免费观看 | 国产一级淫片免费看 | 免费国产不卡午夜福在线 | 久久亚洲国产午夜精品理论片 | 黄色片网站免费观看 | 国产污污视频 | 国产精选电影免费在线观看网站 | www.99久| 久久久精品视频网站 | 欧美乱码精品一区 | 国产亚洲精品一区二区三区 | 中文字幕在线网站 | 日本黄色免费播放 | 久久综合久久综合久久 | 亚洲欧美日韩一区二区三区在线观看 | 性生活视频网站 | 免费国产成人高清在线看软件 | 久久久久久久亚洲视频 | 国产精品久久久久久久久久久久久久久久 | 国产成人在线免费看 | 密室逃脱第一季免费观看完整在线 | 免费一级电影 | 激情97| 一级毛片播放 | 欧美人成在线 | 国产xxxx免费 |