任何人都可以帮我这个吗?
我需要做的是添加一个计算器不能容纳的非常大的数字。
这是我的代码虽然它只能保存一个数字,直到2147483647 ..任何数字高于我得到错误消息说明“整数太大”
任何人都可以告诉我如何使用更大的数字?
import java.math.BigDecimal;
public class AddTwoBigNumbers{
public static void main() {
BigDecimal num1, num2;
num1 = new BigDecimal(2147483647);
num2 = new BigDecimal(2147483647);
Sum(num1, num2);
}
public static void Sum(BigDecimal val1, BigDecimal val2){
BigDecimal sum = val1.add(val2);
System.out.println("Sum of two BigDecimal numbers: "+ sum);
}
}
答案 0 :(得分:5)
听起来好像要使用BigInteger
[edit] 要将大于Integer.MAX_VALUE
的数字传递给构造函数,请使用long
:
new BigInteger(9876543210L)
如果你需要一个大于long
的数字,你需要找到一些构造它的方法(比如把它作为一个字符串传递,或者乘以两个BigInteger
s)
答案 1 :(得分:1)
构造BigDecimal时,您正在使用整数。在Java中,整数只能容纳2 ^ 31,因此当你以这种方式构造BigDecimal时,这就是它所允许的全部内容。如果你给它一个更大的int,编译器会抱怨。
解决此问题的方法是传入您的号码的字符串表示。
num1 = new BigDecimal("123123123123123123123123");
答案 2 :(得分:0)
num1 = new BigDecimal( 2147483648l ); num2 = new BigDecimal( 2147483649l );
BigDecimal构造函数支持long / double作为参数,使用其中之一。
答案 3 :(得分:0)
数字总是被解释为整数。如果您希望将数字编译为long,则应为其添加后缀“L”,因此它将为2147483647333L
。如果数字大于MAX_LONG(~2 ^ 31),您应该使用this constructor将其作为字节数组提供,并使用数字的字符串表示形式(“1234.56”)。
答案 4 :(得分:0)
您是否在询问如何使用更大的数字创建BigDecimal(或BigInteger)?如果是这样,首先应该为您的数字字面添加L
- 这使其成为long
而不是int
。如果这还不够大,你也可以通过传递一个String
数字表示来创建新的BigDecimals / BigIntegers。
答案 5 :(得分:0)
您应该使用接受值为的构造函数,否则您将受到所使用数据类型大小的限制,以避免使用BigXXXX类。
答案 6 :(得分:0)
BigDecimal在构造函数中需要很长时间。但是你最后需要一个L。
新的BigDecimal(2147483648L)应该有效。