public static void main(String[] args) {
double priceWithFreight = 1200.5698d;
System.out.println(priceWithFreight);
//double转string 超过1000小数点会变成逗号的bug, 不要用这个方法
NumberFormat nf = NumberFormat.getInstance();
nf.setRoundingMode(RoundingMode.HALF_UP);//设置四舍五入
nf.setMaximumFractionDigits(2);//设置最大保留几位小数
String str= nf.format(priceWithFreight);
System.out.println(str); // 输出: 1,200.57
//正确的double 转string 的方法
BigDecimal b = new BigDecimal(priceWithFreight);
String str1=String.valueOf(b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
System.out.println(str1); //输出: 1200.57
}
double n = 0.01;
double m = 0.06;
System.out.println(m+n); // 输出: 0.06999999999999999
需要把 double 转化成 String, 然后转化成 BigDecimal ,再计算:
BigDecimal d1 = new BigDecimal(Double.toString(m)); // d1是 0.06
BigDecimal d2 = new BigDecimal(String.valueOf(n)); // d2 是 0.01
BigDecimal res = d1.add(d2);
System.out.println(res); // 输出: 0.07
或者用以下的方法:
double res2 = m+n; // res2 的值是 0.06999999999999999
double val = 1.00;
int scale = 2;
double result = new BigDecimal(Double.toString(res2)).multiply(new BigDecimal(Double.toString(val))).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(result);
ROUND_HALF_UP 四舍五入
如果一个对象 obj 的属性定义为Integer id ,则 obj.getId() + "" 输出的是 “null” 字符串,而不是 空 或者 null 对象。