BigDecimal
package com.monv.str; import java.math.BigDecimal; public class TestBigDec { public static void main(String[] args) { double d1 = 1.0; double d2 = 0.9; System.out.println(d1-d2);//0.09999999999999998 double d3 = (1.4-0.5)/0.9; System.out.println(d3);//0.9999999999999999 //为什么上边的两个结果都不为0.1和1呢? 因为double存储的是近似值 是不准确的 //在实际中会需要精确运算,double就不再适用,需要用BigDecimal //BigDecimal 大的浮点数精确计算 BigDecimal bd1 = new BigDecimal("1.0");//构造方法要用String的 BigDecimal bd2 = new BigDecimal("0.9"); //减法 BigDecimal r1 = bd1.subtract(bd2);//做减法不能直接减,需要用subtract来计算 System.out.println("bd1-bd2:"+r1); //加法 BigDecimal r2 = bd1.add(bd2); System.out.println("bd1+bd2:"+r2); //乘法 BigDecimal r3 = bd1.multiply(bd2); System.out.println("bd1*bd2:"+r3); //除法 BigDecimal r4 = new BigDecimal("1.4") .subtract(new BigDecimal("0.5")) .divide(new BigDecimal("0.9")); System.out.println("除法(除尽):"+r4); //除不尽的情况 如果没写保留几位小数 会报错 divide(除数,保留位数,保留小数的方式) BigDecimal.ROUND_HALF_UP:四舍五入 BigDecimal r5 = new BigDecimal("20").divide(new BigDecimal("3"), 2, BigDecimal.ROUND_HALF_UP); System.out.println("除不尽保留小数:"+r5); } } ------------------------------ 结果: 0.09999999999999998 0.9999999999999999 bd1-bd2:0.1 bd1+bd2:1.9 bd1*bd2:0.90 除法(除尽):1 除不尽保留小数:6.67
原文:https://www.cnblogs.com/mo-nv/p/13644809.html