• BigDecimal类


     1 /**
     2  * 一.java的double类型会丢失精度
     3  * 二.BigDecimal不推荐使用double类型的构造参数,因为得到的值只是一个近似值,比如0.1,只会得到一个近似0.1的值
     4  * 三.BigDeciaml推荐使用String类型的构造参数,因为得到的值是精确值
     5  * 四.如果一定要使用double类型的,通过BigDecimal valueOf(double value)静态方法来创建BigDecimal对象
     6  * @author 罗摩衔那
     7  *
     8  */
     9 public class Demo_BigDecimal 
    10 {
    11 
    12     public static void main(String[] args) 
    13     {
    14        BigDecimal f1=new BigDecimal("0.05");//String参数类型的构造函数
    15        BigDecimal f2=BigDecimal.valueOf(0.01);
    16        BigDecimal f3=new BigDecimal(0.05);//double参数类型的构造函数
    17        
    18        System.out.println("使用String作为BigDecimal构造参数 ");
    19        System.out.println("0.05+0.01="+f1.add(f2));
    20        System.out.println("0.05-0.01="+f1.subtract(f2));
    21        System.out.println("0.05*0.01="+f1.multiply(f2));
    22        System.out.println("0.05/0.01="+f1.divide(f2));
    23        
    24        System.out.println("使用double作为BigDecima构造参数 ");
    25        System.out.println("0.05+0.01="+f3.add(f2));
    26        System.out.println("0.05-0.01="+f3.subtract(f2));
    27        System.out.println("0.05*0.01="+f3.multiply(f2));
    28        System.out.println("0.05/0.01="+f3.divide(f2));
    29     }
    30 
    31 }

     二.如果程序要对double类型的数值进行运算,可用Arith工具类

        程序实质为:将double类型的数值包装成BigDecimal对象,再调用BigDecimal类的运算方法进行运算,最后转换成double类型变量

     1 import java.math.BigDecimal;
     2 
     3 public class Arith 
     4 {
     5    public static void main(String[] args) 
     6    {
     7     System.out.println("0.05+0.01="+Arith.add(0.05, 0.01));
     8     System.out.println("0.05+0.01="+Arith.sub(0.05, 0.01));
     9     System.out.println("0.05+0.01="+Arith.mul(0.05, 0.01));
    10     System.out.println("0.05+0.01="+Arith.div(0.05, 0.01));
    11    }
    12    //默认除法运算精度
    13     private static final int DEY_DIV_SCALE=10;
    14     //构造器私有,让这个类不能实例化
    15     private Arith() {};
    16     
    17     //
    18     public static double add(double b1,double b2)
    19     {
    20         BigDecimal v1=BigDecimal.valueOf(b1);
    21         BigDecimal v2=BigDecimal.valueOf(b2);
    22         return v1.add(v2).doubleValue();
    23     }
    24     
    25     //
    26     public static double sub(double b1,double b2)
    27     {
    28         BigDecimal v1=BigDecimal.valueOf(b1);
    29         BigDecimal v2=BigDecimal.valueOf(b2);
    30         return v1.subtract(v2).doubleValue();
    31     }
    32     
    33     //
    34     public static double mul(double b1,double b2)
    35     {
    36         BigDecimal v1=BigDecimal.valueOf(b1);
    37         BigDecimal v2=BigDecimal.valueOf(b2);
    38         return v1.multiply(v2).doubleValue();
    39     }
    40     
    41     //提供(相对)精确的除法运算,当发生除不尽的情况时
    42     //精确到小数带你以后10位的数字四舍五入
    43     public static double div(double b1,double b2)
    44     {
    45         BigDecimal v1=BigDecimal.valueOf(b1);
    46         BigDecimal v2=BigDecimal.valueOf(b2);
    47         return v1.divide(v2, DEY_DIV_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
    48     }
    49 }

  • 相关阅读:
    sed 练习
    正则表达式
    字符转换命令
    命令执行判断依据
    shell 操作环境
    选取命令
    排序命令
    命令别名与历史命令
    变量的学习
    防止恶意跳转
  • 原文地址:https://www.cnblogs.com/zjm1999/p/10040925.html
Copyright © 2020-2023  润新知