首页 > 其他分享 >BigDecimal类

BigDecimal类

时间:2022-08-31 21:36:33浏览次数:68  
标签:BigDecimal System println new public out

 

先看遇到的问题:

package lesson2;

public class Demo05 {
public static void main(String[] args) {
double d1 = 1.0;
double d2 = 0.9;
System.out.println(d1-d2);
//面试题
    double result = (1.4-0.5)/0.9;
    System.out.println(result);
}
}

 

 

 

为什么会出现上面的情况呢?

简单点说就是,计算机在存储浮点数字时以二进制方法存储,在进行转化为二进制时存储的小数部分出现部分数据丢失,而成为近似值,从而导致在计算时出现错误。

详细可参考:Java中浮点数运算不准确的原因

为解决此类问题而引入BigDecimal类

 

常用方法

构造方法

BigDecimal类的构造方法挺多的,但这里只介绍一种public BigDecimal(String val),将字符串表示形式转换为BigDecimal。注意这里一定是字符串String,如果在参数为小数时,使用double类型时,会出现一定的问题(注意看实例)。

 

普通方法

BigDecimal创建的是对象,所以在运算的时候不能再使用+-*/等算术运算符进行直接运算,而是使用相应的方法。

 

方法描述
public BigDecimal add(BigDecimal augend) 加法
public BigDecimal subtract(BigDecimal subtrahend) 减法
public BigDecimal multiply(BigDecimal multiplicand) 乘法
public BigDecimal divide(BigDecimal divisor,int scale, int roundingMode) 除法。divisor - 此 BigDecimal 要除以的值。scale - 要返回的 BigDecimal 商的标度。roundingMode - 要应用的舍入模式。

 

 这里需要注意的是,在进行除法运算时,如果结果为除不尽的数,未标明保留几位小数(或使用舍入的方式),会抛出的异常:

 

 

 

 

 

常用的四舍五入的方法:

 

常量描述
ROUND_HALF_UP 四舍五入
ROUND_UP 直接进位
ROUND_DOWN 直接舍弃
ROUND_HALF_DOWN 舍弃部分>0.5进位,否则舍弃

 

 


实例

 package lesson2;

import java.math.BigDecimal;

public class Demo05 {
  public static void main(String[] args) {
     //BigDecimal,大的浮点数
     System.out.println("======减法======");
     BigDecimal bd1 = new BigDecimal("1.0");
     BigDecimal bd2 = new BigDecimal("0.9");
     BigDecimal r1=bd1.subtract(bd2);
     System.out.println(r1);

     System.out.println("=====加法=====");
     BigDecimal r2=bd1.add(bd2);
     System.out.println(r2);

    System.out.println("======乘法======");
    BigDecimal r3=bd1.multiply(bd2);
    System.out.println(r3);

    System.out.println("======除法======");
    BigDecimal r4 = new BigDecimal("1.4")
     .subtract(new BigDecimal("0.5"))
     .divide(new BigDecimal("0.9"));
     System.out.println(r4);

     BigDecimal r5 = new BigDecimal("10").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);

    //10除以3的结果四舍五入,保留两位小数
     System.out.println(r5);
}
}


 

标签:BigDecimal,System,println,new,public,out
From: https://www.cnblogs.com/zypdbk/p/16644558.html

相关文章

  • Stream 分组,BigDecimal求和汇总
    //分组 Map<String,List<ChartDataView>>map=data.stream().map(t->{ ChartDataViewc=newChartDataView(); c.setDimension1(t.getDim......
  • BigDecimal相除并保留小数后两位
    /***使用BigDecimal精确计算相除*@returnString*/publicstaticStringdivideForBigDecimal(Integera,Integerb){BigDecimalbigDecimal=newBigDecimal(a......
  • JAVA BigDecimal
    加减乘除BigDecimalqtySettleTotal=qtySettleTotal.setScale(2,BigDecimal.ROUND_HALF_UP);BigDecimalqtyYF=this.txtqtyYF.getBigDecimalValue().setScale(2,B......
  • BigDecimal详解和精度问题
    JavaGuide :「Java学习+面试指南」一份涵盖大部分Java程序员所需要掌握的核心知识。BigDecimal是大厂Java面试常问的一个知识点。《阿里巴巴Java开发手册》中......
  • Java8 对list集合中的bigdecimal进行分组求和,均值,最大值,最小值
     文章目录需求中对数值进行求和的非常多,但java8对bigdecimal求和没有封装新建接口ToBigDecimalFunction新建工具类CollectorsUtil实体类Person 需求中对......
  • 常用类 .BigDecimal
    BigDecimal是精确存储,而double是近似值存储位置:java.math包中作用:精确计算浮点数创建方式:BigDecimalbd=newBigDecimal("1.0")方法:BigDecimaladd(BigDecimalbd)加......
  • Day04-BigDecimal等类
    BigDecimal类一.使用场景float和double类型的值存储方式为近似存储,在某些精度要求高的行业需要精确存储数据,则需要使用BigDecimal类二.BigDecimal类介绍位置:java.ma......