你如何处理大于UInt64的数字(C#)

在C#中,如何使用显着超过UInt64最大值(18,446,744,073,709,551,615)的数字进行存储和计算?

通过使用BigInteger类; 在J#库中有一个(绝对可以从C#访问),F#中的另一个(需要测试这个),并且在纯C#中有一些独立的实现, 例如这个 。

你能使用.NET 4.0 beta吗? 如果是这样,您可以使用BigInteger

否则,如果你坚持在28位数内,你可以使用decimal – 但要注意,显然这将执行十进制算术,所以你可能需要在不同的地方进行舍入来补偿。

您希望将这些数字用于什么? 如果您使用非常大的数字进行计算,您是否仍然需要精确到最后一位数? 如果没有,您应该考虑使用浮点值。 它们可能很大,双重类型的最大值是1.79769313486231570E + 308,(如果您不习惯科学记数法,则表示1.79769313486231570乘以10000000 … 0000 – 308零)。

这对于大多数应用来说应该足够大

BigInteger表示任意大的有符号整数。

 using System.Numerics; var a = BigInteger.Parse("91389681247993671255432112000000"); var b = new BigInteger(1790322312); var c = a * b; 

十进制有更大的范围。

在.NET 4.0中支持bigInteger,但仍然没有测试版。

有几个用于大整数计算的库,大多数加密库也提供了一个类。 看到这个免费图书馆。

你可以使用小数 。 它大于Int64。

它有28-29位有效数字。