当前位置:   article > 正文

BigDecimal类和以BigDecimal类为基础定义类Arith工具类_arith.div

arith.div

一、认识

float和double两种数据类型容易引起精度的丢失,所以java提供BigDecimal类提高精度。该类提供了大量的构造器用于 创建BigDecimal 对象,把所有的基本数值类型变量转换成一个BigDecimal对象。

二、常用的两个构造器:

1、BigDecimal(double value):不推荐使用该构造器,因为当使用new BigDecimal(0.1)来创建一个对象时,它的值不是0.1,而实际上是一个近似0.1的值,表面看着是个0.1。

2、BidDiecimal(String value):推荐使用这个构造器,newBigDecimal("0.1")来创建一个对象时,得到的和预期的一样是个0.1的值。

注意如果非要接收一个double的值得话,可以通过BigDecimal.valueOf(double value)静态方法来创建对象。例如:

BigDecimal f2 = BigDecimal.valueOf(0.01);

三、基本操作

add(BigDecimal value):精确加法

subtract(BigDecimal value):精确减法

multiply(BigDecimal value):精确乘法

divide(BigDecimal value);精确除法

四、java实现

  1. import java.math.BigDecimal;
  2. public class BigDecimalTest {
  3. public static void main(String[] args){
  4. BigDecimal f1 = new BigDecimal("0.05");
  5. BigDecimal f2 = BigDecimal.valueOf(0.01);
  6. BigDecimal f3 = new BigDecimal(0.05);
  7. System.out.println(f1);
  8. System.out.println("使用String作为BigDecimal构造器参数");
  9. System.out.println(f2);
  10. System.out.println("0.05 + 0.01 = " + f1.add(f2));
  11. System.out.println("0.05 - 0.01=" + f1.subtract(f2));
  12. System.out.println("0.05 * 0.01=" + f1.multiply(f2));
  13. System.out.println("0.05 / 0.01=" + f1.divide(f2));
  14. System.out.println("使用double作为BigDecimal构造器参数:");
  15. System.out.println("0.05 + 0.01 =" + f3.add(f2));
  16. System.out.println("0.05 - 0.01 =" + f3.subtract(f2));
  17. System.out.println("0.05 * 0.01 =" + f3.multiply(f2));
  18. System.out.println("0.05 / 0.01 =" + f3.divide(f2));
  19. }
  20. }

结果:

五、Arith工具类

过程:先将double数值包装成BigDecimal类型,运算出结果后,再转成double类型。

java实现:

  1. import java.math.BigDecimal;
  2. public class Arith {
  3. //默认除法运算精度
  4. private static final int DEF_DIV_SCALE = 10;
  5. //构造器私有,让这个类不能实例化
  6. private Arith(){}
  7. //提供精确的加法运算
  8. public static double add(double v1,double v2){
  9. BigDecimal b1 = BigDecimal.valueOf(v1);
  10. BigDecimal b2 = BigDecimal.valueOf(v2);
  11. return b1.add(b2).doubleValue();
  12. }
  13. //提供精确的减法运算
  14. public static double sub(double v1,double v2){
  15. BigDecimal b1 = BigDecimal.valueOf(v1);
  16. BigDecimal b2 = BigDecimal.valueOf(v2);
  17. return b1.subtract(b2).doubleValue();
  18. }
  19. //提供精确的乘法运算
  20. public static double mul(double v1,double v2){
  21. BigDecimal b1 = BigDecimal.valueOf(v1);
  22. BigDecimal b2 = BigDecimal.valueOf(v2);
  23. return b1.multiply(b2).doubleValue();
  24. }
  25. //提供精确的除法运算
  26. public static double div(double v1,double v2){
  27. BigDecimal b1 = BigDecimal.valueOf(v1);
  28. BigDecimal b2 = BigDecimal.valueOf(v2);
  29. return b1.divide(b2).doubleValue();
  30. }
  31. }

//ArithMain类

  1. public class ArithMain {
  2. public static void main(String[] args){
  3. System.out.println("0.06 + 0.02 = " + Arith.add(0.06,0.02));
  4. System.out.println("0.06 - 0.02 = " + Arith.sub(0.06,0.02));
  5. System.out.println("0.06 * 0.02 = " + Arith.mul(0.06,0.02));
  6. System.out.println("-123.3 / 100 = " + Arith.div(-123.3,100));
  7. }
  8. }

结果:

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/319799
推荐阅读
  

闽ICP备14008679号