Java--BigDecimal(精确浮点数)
BigDecimal
- 位置:java.math包中
- 作用:精确计算浮点数
- 创建方式:BigDecimal bd = new BigDecimal("1.0");//这里要用字符串
- 常用方法:
- 加:BigDecimal add(BigDecimal bd)
- 减:BigDecimal subtract(BigDecimal bd)
- 乘:BigDecimal multiply(BigDecimal bd)
- 除:BigDecimal divide(BigDecimal bd) 注意:遇到除不尽的情况,需要保留小数位数
- 除不尽:BigDecimal divide(BigDecimal bd,int scal,RoundingMode mode)
- 参数scal:指定精确到小数点后几位
- 参数mode:指定小数部分的取舍模式,通常采用四舍五入的模式(BigDecimal.ROUND_HALF_UP)
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
输出是最好的输入。把学习的内容输出出来,加深记忆;