如题,今天面试,面试官问到一个问题,怎么处理两个Long类型相乘溢出的问题?
[code="java"]
public static void main(String[] args) throws Exception {
long a = Long.MAX_VALUE;
long b = Long.MAX_VALUE;
BigDecimal ba = new BigDecimal(String.valueOf(a));
BigDecimal bb = new BigDecimal(String.valueOf(b));
BigDecimal bc = ba.multiply(bb);
System.out.println(String.valueOf(a));
System.out.println(String.valueOf(b));
System.out.println(bc);
}
[/code]
9223372036854775807
9223372036854775807
85070591730234615847396907784232501249
用java.math.BigInteger处理。
java.Math.BigDecimal.multiply(java.Math.BigDecimal multiplican)
用BigDecimal
可以简单的说使用比long大的数据类型去接收乘积结果。例如:float,double,long double
http://jeelee.iteye.com/blog/652003
java.math.BinInteger类是针对大整数的处理类
java.math.BigDecimal类是针对大小数的处理类并加入了小数的概念