46 java常用类_8 _BigDecimal
原创
©著作权归作者所有:来自51CTO博客作者悬浮海分海的原创作品,请联系作者获取转载授权,否则将追究法律责任
46 java常用类_8 _BigDecimal
BigDecimal
- 很多实际应用中需要精确计算,而浮点数 double 、 float是 近似值存储,不符合要求,需要借助BIgDecimal
- BigDecimal 是精确存储
- 位置:java.math包中
- 作用:精确计算浮点数
- 创建方式:
BigDecimal bigDecimal = new BigDecimal("1.0");
- 方法:
- BIgDecimal add(BigDecimal bd) 加
- BIgDecimal subtract(BigDecimal bd) 减
- BIgDecimal multiply(BigDecimal bd) 乘
- BIgDecimal divide(BigDecimal bd) 除
- 注意点:
- 进行除法运算时,如果不能准确的计算出结果时(除不尽),需要指出保留的位数与取舍方式
- 除法: divide (BigDecimal bd, int scal, RoundingMode mode)
- 参数scal :指定精确到小数点后几位。
- 参数mode:
- 指定小数部分的取舍模式,通常采用四舍五入的模式,
- 取值为BigDecimal. ROUND_ HALF_ UP。(四舍五入)
代码如下:
package com.wlw.common_class.bigdecimal;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Demo01 {
public static void main(String[] args) {
//浮点数(double float)运算的不精确性:
double d1 = 1.0;
double d2 = 0.9;
System.out.println(d1-d2); //0.09999999999999998
//面试题
double result = (1.4-0.5)/0.9;
System.out.println(result); //0.9999999999999999
// 精确计算浮点数的方式 : BigDecimal类
//创建时,浮点数最好用字符串表示,这样最准确
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");
//减法
BigDecimal r1 = bd1.subtract(bd2);
System.out.println(r1); //0.1
//加法
BigDecimal r2 = bd1.add(bd2);
System.out.println(r2); //1.9
//乘法
BigDecimal r3 = bd1.multiply(bd2);
System.out.println(r3); //0.90
//除法
BigDecimal r4 = new BigDecimal("1.4").
subtract(new BigDecimal("0.5")).
divide(new BigDecimal("0.9"));
System.out.println(r4); //1
//当除法遇到 除不尽的时候,我们可以选择以四舍五入的方式保留2位小数
BigDecimal r5 = new BigDecimal("20.0").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);
System.out.println(r5); //0.67
}
}
/*
执行结果:
0.09999999999999998
0.9999999999999999
0.1
1.9
0.90
1
6.67
*/