今天遇到一个要处理xsd中integer的数值区间的计算的问题,integer这个类型的值区间理论上是可没有边界的,假设目前的值是1.5e+10000, 这个数字已经达到double和int64都无法存储了,同时我还要对如此大的数字进行加减运算,后来发现了biginteger这个类可以很好的解决我遇到的问题。^_^
biginteger
自.net framework 4.0开始引入, 位于命名空间:
namespace system.numerics
设计用于存储超大整型数字,所以只要内存够大,存储是没有上限和下限的,否则如果数字过大的话,会遇到outofmemory的异常。
我的案例
因为我的输入就是一个字符串的数字,所以我调用biginteger.parse()方法可以得到一个biginteger实例,然后就可以对于进行+1 或者 -1的运算了
static void main(string[] args)
{
string largenum = "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
var number = biginteger.parse(largenum);
var numberdecreaseone = number - 1;
var numberincreaseone = number + 1;
console.writeline(numberdecreaseone);
console.writeline(" ");
console.writeline(numberincreaseone);
console.readkey();
}
复制代码
输出结果:
biginteger还很很多的方法:比如 min, max, substract, multiply, divide, log, pow, 等等,同时biginteger对大量的运算符都进行了重载,很方便使用。
(编辑:雷林鹏