[C#] 一個可以超越 Decimal 的物件 - BigInteger

2022-10-31

最近在碰到一些數字超過  C# 的 Decimal 的極限了,後來我查一下,原來還有一個東西叫做 BigInteger 

看起來可以解決我要的問題,所以順手作了一些筆記,想說就記錄一下..



這邊案例我有一個數字,123467890123467890123467890123467890123467890123467890123467890123467890123467890123467890123467890123467890

夠長了吧,這鬼東西要怎麼念可以參考 這裡 ,這邊就不贅述了

接下來就是程式碼的部分,這裡面有包含轉 HEX 全小寫,之後再將 HEX 轉回十進位

var str = "123467890123467890123467890123467890123467890123467890123467890123467890123467890123467890123467890123467890"; BigInteger bInt1 = BigInteger.Parse(str); //轉十六進位字串小寫,如果要大寫可以用 X var hexString1 = bInt1.ToString("x"); Console.WriteLine("DEC => HEX:"); Console.WriteLine(hexString1); //轉十六進位如果開頭是 0 則去掉,這是因為我案例需要如果是您平常使用你可以忽略那個0 ,因為這跟表正負數有關係 var hexString2 = bInt1.ToString("x").TrimStart('0'); Console.WriteLine("DEC => HEX(remove prefix 0):"); Console.WriteLine(hexString2); //十六進位轉回10進位 var restoreBigInteger1 = BigInteger.Parse(bInt1.ToString("x"), System.Globalization.NumberStyles.AllowHexSpecifier); Console.WriteLine("HEX => DEC"); Console.WriteLine(restoreBigInteger1); //去0的十六進位轉10進位 Console.WriteLine("HEX => DEC(remove prefix 0):"); var restoreBigInteger2 = BigInteger.Parse(bInt1.ToString("x").TrimStart('0'), System.Globalization.NumberStyles.AllowHexSpecifier); Console.WriteLine(restoreBigInteger2);


我都寫在程式碼註解了,中間有一個關鍵就是都會有一個 0 要去判斷正負,所以要不要移除這就是要看你了

Result:

DEC => HEX:

0d755e029f7a371304e2191353fa3b1acf71e3186c5b8bef42e4bc83809f9efbf6d75a3319b8a871190e81ec72

DEC => HEX(remove prefix 0):

d755e029f7a371304e2191353fa3b1acf71e3186c5b8bef42e4bc83809f9efbf6d75a3319b8a871190e81ec72

HEX => DEC

123467890123467890123467890123467890123467890123467890123467890123467890123467890123467890123467890123467890

HEX => DEC(remove prefix 0):

-23316021299896686619624647175865674087512269183302101795737795597295173946195137593013297275580153816028046



當麻許的碎念筆記 2014 | Donma Hsu Design.