import java.math.BigDecimal; import java.math.RoundingMode; public class d1 { //解决double类型数据相加精度问题; public static void main(String args[]){ double a = 12.33999999d; double b = 11.3365d; BigDecimal a1 = new BigDecimal(Double.toString(a));//将double类型转化成String类型; BigDecimal b1 = new BigDecimal(Double.toString(b)); System.out.println("a + b ="+a1.add(b1)); System.out.println("b - a ="+b1.subtract(a1)); System.out.println(b - a); double c = b - a; BigDecimal c1 = new BigDecimal(Double.toString(c)); a1 = a1.setScale(2, RoundingMode.FLOOR);//小数点后两位数向负无穷方向舍入; System.out.println("----------------"); a1 = c1.setScale(2, RoundingMode.FLOOR);//二进制转化成十进制负数精度依然有可能丢失?? System.out.println(a1); } }
import java.math.BigDecimal; import java.math.RoundingMode; public class d2 { public static void main(String args[]){ BigDecimal total = new BigDecimal(0); BigDecimal a = new BigDecimal(Double.toString(99.88)); BigDecimal b = new BigDecimal(2); BigDecimal c = new BigDecimal(Double.toString(99.66)); BigDecimal f = new BigDecimal(Double.toString(88.99)); total = total.add(a.multiply(b));//188.65 System.out.println(total); System.out.println(a.multiply(b).add(c).add(f)); } }