最近做项目遇到一个处理大数据的运算及保留小数问题,
比如:
double a = 2341930134413.0;
double b = 982332323233.987656;
double c = a*b;
//算出的结果:2.3005536697896073E24
以上计算明显不是想要的结果,为了解决这个问题,需要引入BigDecimal类来作处理。
比如:
double a = 2341930134413.0;
double b = 982332323233.987656;
BigDecimal _a = new BigDecimal(a);
BigDecimal _b = new BigDecimal(b);
String c = _a.multiply(_b).toString();
//算出的结果:2300553669789607308957162.5428466796875
接下来要处理保留小数位的问题,保留1位小数,此时不能用double来参与计算,因为其精度无法满足时会出现上面类似的情况,通常用字符串String接收,具体代码如下:
double a = 2341930134413.0;
double b = 982332323233.987656;
BigDecimal _a = new BigDecimal(a);
BigDecimal _b = new BigDecimal(b);
BigDecimal c = _a.multiply(_b);
String d = c.setScale(1, BigDecimal.ROUND_HALF_UP).toString();
//算出的结果:2300553669789607308957162.5