两个Long类型相乘溢出怎么解决

如题,今天面试,面试官问到一个问题,怎么处理两个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类是针对大小数的处理类并加入了小数的概念