如果连long类型也无法满足需求,如果需要高精度的浮点数,那么可以考虑使用java,math包里的两个有用的类:BigInteger和BigDecimal,它们可以包含任意长度数字序列的数值。
利用BigInteger表示一个超大的数值(超出long类型能够表示的范围):
BigInteger big = new BigInteger("9999999999999999999999");
因为float和double类型可能会出现精度损失问题,所以可以用BigDecimal来代替。
BigDecimal bigD = new BigDecimal("1.0");
BigInteger和BigDecimal的运算方法(因为不能对运算符进行重载,所以只能用方法来实现)
BigInteger one = BigInteger.valueOf(1); BigInteger two = BigInteger.valueOf(2); BigInteger add = one.add(two); // 1 + 2 BigInteger subtract = one.subtract(two); // 1 - 2 BigInteger multiply = one.multiply(two); // 1 * 2 BigInteger divide = one.divide(two); // 1 / 2 BigInteger mod = one.mod(two); // 1 % 2 // BigDecimal除了没有取模操作外,其余都有。
不同于C++,java不能重载+,-,*,/等运算符。虽然Java语言设计者确实对字符串的连接重载了+运算符,但没有重载其它运算符。 也没有给Java程序员重载其它运算符的权利。