我是靠谱客的博主 阳光大叔,最近开发中收集的这篇文章主要介绍BigDecimal常用方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、double和float问题
double和float在平时使用中常常会出现一些意想不到的结果,当我们想进行精确计算时他们显然不是一个好选择,如果想保留小数点后几位显然更难操作。因此在涉及到金钱计算或想指定小数位数时用BigDecimal是最好的选择。

double和float出现的问题

public static void main(String[] args)
    {
        System.out.println(0.2 + 0.1);
        System.out.println(0.3 - 0.1);
        System.out.println(0.2 * 0.1);
        System.out.println(0.3 / 0.1);
    }
    
/*运行结果:    
 0.30000000000000004
 0.19999999999999998
 0.020000000000000004
 2.9999999999999996
 */

2.BigDecimal构造方法

1.public BigDecimal(double val) 将double表示形式转换为BigDecimal *不建议使用

2.public BigDecimal(int val)  将int表示形式转换成BigDecimal

3.public BigDecimal(String val)  将String表示形式转换成BigDecimal

//double构造的弊端

  public static void main(String[] args)
    {
        BigDecimal ints= new BigDecimal(2);
        BigDecimal doubles = new BigDecimal(2.3);
        BigDecimal str = new BigDecimal("2.3");

        System.out.println("ins t= " + ints);
        System.out.println("doubles = " + doubles );
        System.out.println("String = " + str );
    }
    /*运行结果:
    ints = 2
    doubles = 2.29999999999999982236431605997495353221893310546875
    Str = 2.3
    */

4.double转BigDecimal方式。
用.valueOf()方法、或将double类型转为字符串

BigDecimal double1 = BigDecimal.valueOf(2.3);

BigDecimal double2 = new BigDecimal(Double.toString(2.3));

3.BigDecimal常用方法,+ - * /

add (BigDecimal value);                        //加法

subtract (BigDecimal value);                   //减法 

multiply (BigDecimal value);                   //乘法

divide (BigDecimal value);                     //除法

divide (BigDecimal divisor, int scale, int roundingMode)  //除法的参数,可设置小数位数和舍入方式

setScale (int scale, int roundingMode)            //设置小数位数,舍入方式

1.加、减、乘、除运算

 public static void main(String[] args)
    {
        BigDecimal a = new BigDecimal("4.5");
        BigDecimal b = new BigDecimal("1.5");
        
        System.out.println("a + b =" + a.add(b));
        System.out.println("a - b =" + a.subtract(b));
        System.out.println("a * b =" + a.multiply(b));
        System.out.println("a / b =" + a.divide(b));
}

2.除法有可能会除不尽,这时可以给 divide 方法指定参数

public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 

第一个参数表示除数
第二个参数表示小数点后保留位数(设置小数位数可以利用这个参数)
第三个参数表示舍入模式

除法的第三个参数值

 ROUND_CEILING    //向正无穷方向舍入
    
    ROUND_DOWN    //向零方向舍入
    
    ROUND_FLOOR    //向负无穷方向舍入
    
    ROUND_HALF_DOWN    //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
    
    ROUND_HALF_EVEN    //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
    
    ROUND_HALF_UP    //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6
    
    ROUND_UNNECESSARY    //计算结果是精确的,不需要舍入模式
    
    ROUND_UP    //向远离0的方向舍入

3.设置小数位数和舍入方式 。setScale()

   public static void main(String[] args)
    {
        BigDecimal a = new BigDecimal("4.5635");

        a = a.setScale(3, RoundingMode.HALF_UP);    //保留3位小数,且四舍五入
        System.out.println(a);
    }

原文链接:https://blog.csdn.net/fengdong1996/article/details/88849908

最后

以上就是阳光大叔为你收集整理的BigDecimal常用方法的全部内容,希望文章能够帮你解决BigDecimal常用方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部