public static BigDecimal safeSubtract(BigDecimal num1, BigDecimal num2) {
if (num1 == null) {
num1 = BigDecimal.ZERO;
}
if (num2 == null) {
num2 = BigDecimal.ZERO;
}
return num1.subtract(num2);
}
BigDecimal b1 = new BigDecimal(1);
BigDecimal b2 = new BigDecimal(3);
BigDecimal divide1 = b1.divide(b2, 3, RoundingMode.DOWN);
System.out.println(divide1);
对DO中属性priority进行累加
BigDecimal priorityTotal = doList.stream().map(DO::getPriority).reduce(BigDecimal.ZERO, BigDecimal::add);
对集合中DTO类中saleCount属性值进行累加,获取GMV
BigDecimal gmv = BigDecimal.ZERO;
for (DTO dto : dtoList) {
gmv = gmv.add(sellOutWarnSkuDTO.getSaleCount());
}
dtoList.stream().mapToDouble(
dto -> DTO.getSalePcs().doubleValue()).sum();
public static Double bigDecimal2double2Reserve(BigDecimal bigDecimal) {
return bigDecimal.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static void main(String[]args){
double pi = 3.1415927; //圆周率
//取一位整数
System.out.println(new DecimalFormat("0").format(pi)); //3
//取一位整数和两位小数
System.out.println(new DecimalFormat("0.00").format(pi)); //3.14
//取两位整数和三位小数,整数不足部分以0填补。
System.out.println(new DecimalFormat("00.000").format(pi));// 03.142
//取所有整数部分
System.out.println(new DecimalFormat("#").format(pi)); //3
//以百分比方式计数,并取两位小数
System.out.println(new DecimalFormat("#.##%").format(pi)); //314.16%
long c =299792458; //光速
//显示为科学计数法,并取五位小数
System.out.println(new DecimalFormat("#.#####E0").format(c)); //2.99792E8
//显示为两位整数的科学计数法,并取四位小数
System.out.println(new DecimalFormat("00.####E0").format(c)); //29.9792E7
//每三位以逗号进行分隔。
System.out.println(new DecimalFormat(",###").format(c)); //299,792,458
//将格式嵌入文本
System.out.println(new DecimalFormat("光速大小为每秒,###米。").format(c));
}
BigDecimal gmv = xxxxx;
DecimalFormat format = new DecimalFormat("这里的pattern格式可以参考1.4中的BigDecimalFormat使用");
String s = format.format(gmv);
不要科学计算法,且不要无用的小数位
BigDecimal pcs = BigDecimal.valueOf(5454545453.1415926);
String plainString = pcs.stripTrailingZeros().toPlainString();
BigDecimal decimal = new BigDecimal(123456789.2345);
double doubleValue = decimal.doubleValue();
String res = decimal.stripTrailingZeros().toPlainString();
System.out.println(decimal);
System.out.println(doubleValue);
System.out.println(res);
123456789.23450000584125518798828125
1.234567892345E8
123456789.23450000584125518798828125
//保留两位小数
BigDecimal newBigDecimal = decimal.setScale(2, BigDecimal.ROUND_HALF_UP);
double newDoubleValue = newBigDecimal.doubleValue();
String newRes = newBigDecimal.stripTrailingZeros().toPlainString();
System.out.println(newBigDecimal);
System.out.println(newDoubleValue);
System.out.println(newRes);
123456789.23
1.2345678923E8
123456789.23
【强制】 BigDecimal需要使用compareTo()
因为BigDecimal的equals()还会比对精度,2.0与2.00不一致。