一、使用BigDecimal解决精度丢失问题
第一步:把float/double类型的转为BigDecimal类型
BigDecimal bigDecimal = BigDecimal.valueOf(db);
第二步:运算(bigDecimal的加减乘除和绝对值)
bigDecimal.add(bigDecimal1);
bigDecimal.subtract(bigDecimal1);
bigDecimal.multiply(bigDecimal1);
bigDecimal.divide(bigDecimal1,2, RoundingMode.UP);
bigDecimal.abs();
第三步:格式化保留位数
NumberFormat numberInstance = NumberFormat.getNumberInstance();
numberInstance.setMaximumFractionDigits(2);
numberInstance.setMinimumFractionDigits(2);
numberInstance.format(bigDecimal);
二、简单格式化工具类
package com.cfay.controller.utils;
import java.math.BigDecimal;
import java.text.NumberFormat;
public class Operation {
public final static String formatBigDecimal(BigDecimal bigDecimal) {
NumberFormat numberInstance = NumberFormat.getNumberInstance();
numberInstance.setMaximumFractionDigits(2);
numberInstance.setMinimumFractionDigits(2);
return numberInstance.format(bigDecimal);
}
public final static String formatPercent(BigDecimal bigDecimal) {
NumberFormat percent = NumberFormat.getPercentInstance();
percent.setMinimumFractionDigits(2);
percent.setMaximumFractionDigits(2);
return percent.format(bigDecimal);
}
public final static BigDecimal formatDoubleToBigDecimal(Double db) {
BigDecimal bigDecimal = BigDecimal.valueOf(db);
BigDecimal bigDecimal1 = BigDecimal.valueOf(db);
return bigDecimal;
}
public final static String formatDoubleToStringCurrency(Double db) {
NumberFormat currency = NumberFormat.getCurrencyInstance();
currency.setMaximumFractionDigits(2);
currency.setMinimumFractionDigits(2);
String format = currency.format(db);
return format;
}
}